Hızlı Başlangıç: PostgreSQL için Azure Veritabanı - Esnek Sunucu'da verileri bağlamak ve sorgulamak için Go dilini kullanma

ŞUNLAR IÇIN GEÇERLIDIR: PostgreSQL için Azure Veritabanı - Esnek Sunucu

Bu hızlı başlangıçta, Go dilinde (golang) yazılmış kod kullanılarak PostgreSQL için Azure Veritabanı’na nasıl bağlanılacağı gösterilmiştir. Hızlı başlangıçta, veritabanında verileri sorgulamak, eklemek, güncelleştirmek ve silmek için SQL deyimlerinin nasıl kullanılacağı da gösterilmiştir. Bu makalede, Go kullanarak geliştirmeyle ilgili bilgi sahibi olduğunuz ve PostgreSQL için Azure Veritabanı ile çalışmaya yeni başladığınız varsayılır.

Önkoşullar

Bu hızlı başlangıçta, başlangıç noktası olarak şu kılavuzlardan birinde oluşturulan kaynaklar kullanılmaktadır:

Önemli

Bu hızlı başlangıç için Genel erişim (izin verilen IP adresleri) etkinleştirilmiş bir sunucu kullanmanızı öneririz. Bu hızlı başlangıcı tamamlamak için Özel erişim (VNet Tümleştirmesi) etkinleştirilmiş bir sunucu kullanmak, ele alınmayacak ek adımlar içerebilir.

Bağlandığınız IP adresinin Azure portalı veya Azure CLI kullanılarak sunucunun güvenlik duvarı kurallarına eklendiğinden emin olun.

Go ve pq bağlayıcısını yükleme

Makinenize Go’yu ve Pure Go Postgres sürücüsünü (pq) yükleyin. Platformunuza bağlı olarak, uygun adımları izleyin:

  1. Yükleme yönergelerine uygun olarak Microsoft Windows için Go’yu indirin ve yükleyin.

  2. Başlat menüsünden komut istemini başlatın.

  3. Projeniz içinmkdir %USERPROFILE%\go\src\postgresqlgo gibi bir klasör oluşturun.

  4. Dizini değiştirerek proje klasörünüze geçin; örneğin, cd %USERPROFILE%\go\src\postgresqlgo.

  5. GOPATH için ortam değişkenini kaynak kod dizinine işaret edecek şekilde ayarlayın. set GOPATH=%USERPROFILE%\go.

  6. Geçerli dizinde bir modül oluşturmak için go mod init komutunu çalıştırın. Örneğin: go mod init postgresqlgo.

    • <module_path> parametresi genellikle GitHub deposundaki bir konumdur; örneğingithub.com/<your_github_account_name>/<directory>.
    • Test olarak bir komut satırı uygulaması oluştururken ve uygulamayı yayımlamazsanız, öğesinin <module_path> gerçek bir konuma başvurması gerekmez. Örneğin, postgresqlgo.
  7. go get github.com/lib/pq komutunu çalıştırarak Pure Go Postgres sürücüsünü (pq) yükleyin.

    Özetle, Go’yu yükleyin ve ardından komut isteminde şu komutları çalıştırın:

    mkdir  %USERPROFILE%\go\src\postgresqlgo
    cd %USERPROFILE%\go\src\postgresqlgo
    set GOPATH=%USERPROFILE%\go
    go mod init postgresqlgo
    go get github.com/lib/pq
    

Bağlantı bilgilerini alma

PostgreSQL için Azure Veritabanı'na bağlanmak üzere gereken bağlantı bilgilerini alın. Tam sunucu adına ve oturum açma kimlik bilgilerine ihtiyacınız vardır.

  1. Azure Portal’da oturum açın.
  2. Azure portalında sol taraftaki menüden Tüm kaynaklar'ı seçin ve oluşturduğunuz sunucuyu (mydemoserver gibi) arayın.
  3. Sunucu adını seçin.
  4. Sunucunun Genel Bakış panelinden Sunucu adı ile Sunucu yöneticisi oturum açma adı’nı not alın. Parolanızı unutursanız, bu panelden parolayı da sıfırlayabilirsiniz.

Go kodunu derleme ve çalıştırma

  1. Golang kodlarını yazmak için Microsoft Windows’da Not Defteri, Ubuntu’da VI veya Nano, macOS’da TextEdit gibi düz metin düzenleyicilerini kullanabilirsiniz. Daha zengin bir Etkileşimli Geliştirme Ortamı (IDE) tercih ediyorsanız Jetbrains goland, Microsoft tarafından Visual Studio Code veya Atom'u deneyin.
  2. Aşağıdaki bölümlerde yer alan Golang kodunu metin dosyalarına yapıştırın ve *.go dosya uzantısıyla proje klasörünüzde (Windows yolu veya Linux yolu %USERPROFILE%\go\src\postgresqlgo\createtable.go ~/go/src/postgresqlgo/createtable.gogibi) kaydedin.
  3. Kodda HOST, DATABASE, USER ve PASSWORD sabitlerini bulun ve örnek değerleri kendi değerlerinizle değiştirin. PostgreSQL için Azure Veritabanı sunucu örneğinizi oluşturduğunuzda postgres adlı bir veritabanı oluşturulur. Bu veritabanını veya oluşturduğunuz başka bir veritabanını kullanabilirsiniz.
  4. Komut istemini veya bash kabuğunu başlatın. Dizini değiştirerek proje klasörünüze geçin. Örneğin; Windows’da cd %USERPROFILE%\go\src\postgresqlgo\. Linux'ta cd ~/go/src/postgresqlgo/. Belirtilen IDE ortamlarından bazıları kabuk komutları gerektirmeden hata ayıklama ve çalışma zamanı özellikleri sunar.
  5. Uygulamayı derlemek ve çalıştırmak için go run createtable.go komutunu yazarak kodu çalıştırın.
  6. Alternatif olarak, kodu yerel bir uygulamada derlemek için go build createtable.go komutunu kullanın, ardından uygulamayı çalıştırmak için createtable.exe’yi başlatın.

Bağlanma ve tablo oluşturma

CREATE TABLE SQL deyimini kullanarak bir tabloyu bağlamak ve oluşturmak ve ardından INSERT INTO SQL deyimlerini kullanarak tabloya satırlar eklemek için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, PostgreSQL sunucusuyla iletişim kuran sürücü olarak pq paketi ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak PostgreSQL için Azure Veritabanı veritabanına bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, birkaç SQL komutunu çalıştırmak için birkaç kez Exec() yöntemini çağırır. Her seferinde özel bir checkError() yöntemi hata oluşup olmadığını kontrol eder ve hata oluşmuşsa acil çıkış yapar.

HOST, DATABASE, USER ve PASSWORD parametrelerini kendi değerlerinizle değiştirin.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {
	// Initialize connection string.
	var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Drop previous table of same name if one exists.
	_, err = db.Exec("DROP TABLE IF EXISTS inventory;")
	checkError(err)
	fmt.Println("Finished dropping table (if existed)")

	// Create table.
	_, err = db.Exec("CREATE TABLE inventory (id serial PRIMARY KEY, name VARCHAR(50), quantity INTEGER);")
	checkError(err)
	fmt.Println("Finished creating table")

	// Insert some data into table.
	sql_statement := "INSERT INTO inventory (name, quantity) VALUES ($1, $2);"
	_, err = db.Exec(sql_statement, "banana", 150)
	checkError(err)
	_, err = db.Exec(sql_statement, "orange", 154)
	checkError(err)
	_, err = db.Exec(sql_statement, "apple", 100)
	checkError(err)
	fmt.Println("Inserted 3 rows of data")
}

Verileri okuma

SELECT SQL deyimini kullanarak bağlanmak ve verileri okumak için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, PostgreSQL sunucusuyla iletişim kuran sürücü olarak pq paketi ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak PostgreSQL için Azure Veritabanı veritabanına bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. db. Query() yöntemi çağrılarak select sorgusu çalıştırılır ve ortaya çıkan satırlar rows türünden bir değişkende tutulur. Kod, rows.Scan() yöntemini kullanarak geçerli satırdaki sütun veri değerlerini okur ve rows.Next() yineleyicisini kullanarak başka satır kalmayana dek satırları döndürür. Her satırın sütun değerleri konsola yazdırılır. Hata oluşup oluşmadığını denetlemek için her özel checkError() yöntemi kullanıldığında ve hata oluşursa panikle çıkılır.

HOST, DATABASE, USER ve PASSWORD parametrelerini kendi değerlerinizle değiştirin.

package main

import (
	"database/sql"
	"fmt"
	_ "github.com/lib/pq"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Read rows from table.
	var id int
	var name string
	var quantity int

	sql_statement := "SELECT * from inventory;"
	rows, err := db.Query(sql_statement)
	checkError(err)
	defer rows.Close()

	for rows.Next() {
		switch err := rows.Scan(&id, &name, &quantity); err {
		case sql.ErrNoRows:
			fmt.Println("No rows were returned")
		case nil:
			fmt.Printf("Data row = (%d, %s, %d)\n", id, name, quantity)
		default:
			checkError(err)
		}
	}
}

Verileri güncelleştirme

Bağlanmak ve bir UPDATE SQL deyimi kullanarak verileri güncelleştirmek için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, Postgres sunucusuyla iletişim kuran sürücü olarak pq paketi ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak PostgreSQL için Azure Veritabanı veritabanına bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, tabloyu güncelleştiren SQL deyimini çalıştırmak için Exec() yöntemini çağırır. Hata oluşup olmadığını kontrol etmek ve hata oluşmuşsa acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

HOST, DATABASE, USER ve PASSWORD parametrelerini kendi değerlerinizle değiştirin.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = 
		fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Modify some data in table.
	sql_statement := "UPDATE inventory SET quantity = $2 WHERE name = $1;"
	_, err = db.Exec(sql_statement, "banana", 200)
	checkError(err)
	fmt.Println("Updated 1 row of data")
}

Veri silme

DELETE SQL deyimini kullanarak bağlanmak ve verileri silmek için aşağıdaki kodu kullanın.

Kod üç paketi içeri aktarır: sql paketi, Postgres sunucusuyla iletişim kuran sürücü olarak pq paketi ve komut satırında yazdırılan girdi ve çıktı için fmt paketi.

Kod, sql.Open() yöntemini çağırarak PostgreSQL için Azure Veritabanı veritabanına bağlanır ve db.Ping() yöntemini kullanarak bağlantıyı kontrol eder. İşlem boyunca, veritabanı sunucusu için bağlantı havuzunu tutan bir veritabanı tanıtıcı kullanılır. Kod, tablodan bir satır silen SQL deyimini çalıştırmak için Exec() yöntemini çağırır. Hata oluşup olmadığını kontrol etmek ve hata oluşmuşsa acil çıkış yapmak için özel bir checkError() yöntemi kullanılır.

HOST, DATABASE, USER ve PASSWORD parametrelerini kendi değerlerinizle değiştirin.

package main

import (
  "database/sql"
  _ "github.com/lib/pq"
  "fmt"
)

const (
	// Initialize connection constants.
	HOST     = "mydemoserver.postgres.database.azure.com"
	DATABASE = "postgres"
	USER     = "mylogin"
	PASSWORD = "<server_admin_password>"
)

func checkError(err error) {
	if err != nil {
		panic(err)
	}
}

func main() {

	// Initialize connection string.
	var connectionString string = 
		fmt.Sprintf("host=%s user=%s password=%s dbname=%s sslmode=require", HOST, USER, PASSWORD, DATABASE)

	// Initialize connection object.
	db, err := sql.Open("postgres", connectionString)
	checkError(err)

	err = db.Ping()
	checkError(err)
	fmt.Println("Successfully created connection to database")

	// Delete some data from table.
	sql_statement := "DELETE FROM inventory WHERE name = $1;"
	_, err = db.Exec(sql_statement, "orange")
	checkError(err)
	fmt.Println("Deleted 1 row of data")
}

Kaynakları temizleme

Bu hızlı başlangıç sırasında kullanılan tüm kaynakları temizlemek için aşağıdaki komutu kullanarak kaynak grubunu silin:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Sonraki adımlar