LoginSignup
4
6

More than 3 years have passed since last update.

ローカル環境からCloud SQL(PostgreSQL)への接続

Posted at

ローカル環境から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インスタンスに接続する方法

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6