ローカル環境からCloud SQL(MySQL)への接続の「PostgreSQL」版です。
基本的には、MySQLと同じ設定をします。
差分のみ説明します。
#Cloud SQLの作成
テーブルの作成
MySQLの時は、作成したユーザを利用して
gcloud sql connect [インスタンス名] --user=appuser --quiet
で接続出来ましたが、Postgresの場合、以下のエラーになります。
psql: FATAL: database "appuser" does not exist
そのため、一旦postgres
でログインします。
gcloud sql connect [インスタンス名] --user=postgres --quiet
利用するデータベースの切替えます
\c mydb
テスト用のテーブルの作成します
CREATE TABLE users (ID SERIAL PRIMARY KEY, Name VARCHAR(255) NOT NULL, date TIMESTAMP);
MySQLと同様にデータをインサートします。
その後、テーブルのオーナーを変更します。
ALTER TABLE users OWNER TO appuser
#ローカル環境の作成
##ソース
package main
import (
"database/sql"
"fmt"
"log"
"time"
_ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"
)
func main() {
if err := showRecords("インスタンス名", "データベース", "ユーザ名", "パスワード"); err != nil {
log.Fatal(err)
}
}
func showRecords(dbAddress, dbName, dbUser, dbPassword string) error {
// sslmode は必ず disable にする必要があります。
dsn := fmt.Sprintf("host=%s user=%s dbname=%s password=%s sslmode=disable", dbAddress, dbUser, dbName, dbPassword)
db, err := sql.Open("cloudsqlpostgres", dsn)
if err != nil {
return err
}
defer db.Close()
rows, err := db.Query("SELECT * FROM users")
if err != nil {
return err
}
defer rows.Close()
for rows.Next() {
var Name string
var date time.Time
var ID int64
if err := rows.Scan(&ID, &Name, &date); err != nil {
return err
}
fmt.Printf("%d\t%s\t%s\n", ID, Name, date.Format(time.RFC3339))
}
return nil
}
#参考
Cloud SQL Proxy を Golang のパッケージとして使用する
golang mysql driverで `this user requires mysql native password authentication.
GCPのCloud Shellを使ってCloud SQLインスタンスに接続する方法