スキーマ指定でridgepoleを利用

PostgreSQLには商用DBと同様のスキーマというネームスペースがあります。MySQLはCREATE SCHEMAがCREATE DATABASEの別名であり、スキーマのレイヤがありません。

以下のように、接続設定のdatabase.yamlにschema_search_pathオプションを追加することで、ridgepoleもスキーマ内のテーブルメンテナンスが可能です。

development:
  adapter: postgresql
  encoding: unicode
  database: some_db
  host: localhost
  username: scott
  password: tiger
  schema_search_path: "some_schema"

なお、schema_search_pathオプション(pg gem由来)自体はカンマ区切りで複数のスキーマを指定できますが、ridgepoleとの組み合わせでは適切に動作しませんでした。

また、当然ですが、ridgepoleからDDLを実行する前に、該当のデータベース(上の例ではsome_db)に接続のうえ、CREATE SCHEMAでスキーマを作成しておく必要があります。psql接続時にDB指定を省略するとpostgresデータベースに接続するため、目的のDB内にスキーマを作成できていない、という失敗が起こり得ます。

⁋ 2019/07/13↻ 2024/11/07
中馬崇尋
Chuma Takahiro