今回、Google Cloud でPostgresqlを使う機会があり、手順をまとめてみました。

参考資料:

Postgresql入門ガイド

https://cloud.google.com/sql/docs/postgres/how-to?hl=ja

App Engine からの接続

https://cloud.google.com/sql/docs/postgres/connect-app-engine?hl=ja

Cloud SQL for PostgreSQL のクイックスタート

https://cloud.google.com/sql/docs/postgres/quickstart?hl=ja

作成するもの

Projecttest-nodejs

インスタンスIDtest-node-insta

Postgresパスワード:passwd

※Macを使ってるんですが、gcloud sqlでは Option + ¥がバックスラッシュとなってくれなかったので、

バックスラッシュ入力のため、Google日本語入力環境設定を変更しました。

¥キーで入力する文字:バックスラッシュ

テスト用DBtest_db

ユーザー名:dbuser / dbpasswd

gcloudでの接続

$ gcloud sql connecttest-node-insta –user=postgres

1)ユーザーを作成する

Cloud SQL を使用して作成するすべてのユーザーは cloudsqlsuperuser 役割の一部として作成されるため、

psqlクライアントで作成する

postgresql => CREATE USER dbuser WITH LOGIN PASSWORD ‘dbpasswd’;

postgres=> \du

 

2)データベースを作成する

postgres=> CREATE DATABASE test_db OWNER dbuser;

ERROR:  must be member of role “dbuser”

これはロール”postgresql”がスーパーユーザーでないために発生するエラー。

Postgresql独自の制約であり、PostgreSQLドキュメントにも記載されています(^^;

・対処方法

マスタユーザが新たに作成したロールのメンバになっていないといけない。

ここでは、”cloudsqlsuperuser”がマスターユーザーになっているようなので、GRANTする

これなら1)のときCloud SQLで作ればよかったorz

postgres=> GRANT dbuser TO cloudsqlsuperuser;

postgres=> \du

postgres=> CREATE DATABASE test_db OWNER dbuser ENCODING UTF8  LC_COLLATE ja_JP.UTF-8 LC_CTYPE ja_JP.UTF-8 ;

ERROR:  new collation (ja_JP.UTF-8) is incompatible with the collation of the template database (en_US.UTF8)

HINT:  Use the same collation as in the template database, or use template0 as template.

template databaseのなかのcollationを使うか、template0を使えとのことなんで、template0をつかった。

postgres=> CREATE DATABASE test_db OWNER dbuser ENCODING UTF8  LC_COLLATE ja_JP.UTF-8 LC_CTYPE ja_JP.UTF-8 TEMPLATE template0’;

CREATE DATABASE

postgres=> \l

(5 rows)

 

無事できた。

このあたりの情報って、検索しても出てこなかったけど、どうしてるんだろ?