0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Yii2 + PostgreSQL で public 以外のスキーマを使いたい

0
Posted at

Yii2 + PostgreSQL で public 以外のスキーマにアプリで使用するテーブルを置きたい場合、\config\db.php を以下のように設定すると良い。

\config\db.php
<?php

return [
    'class' => yii\db\Connection::class,
    'dsn' => 'pgsql:host=myhost;port=5432;dbname=mydb;options=--search_path=myschema,public',
    'username' => 'xxxxx',
    'password' => 'yyyyy',
    'charset' => 'utf8',
    'schemaMap' => [
        'pgsql' => [
            'class' => yii\db\pgsql\Schema::class,
            'defaultSchema' => 'myschema',
        ],
    ],
    'enableSchemaCache' => !YII_DEBUG,
    'schemaCacheDuration' => 60,
    'schemaCache' => 'cache',
];

ポイントは2つ。

  1. schemaMapdefaultSchemamyschema を設定する
  2. dsnoptionssearch_path を設定して、myschema を優先的に探すようにする

defaultSchema の設定は Yii2 の各種コンポーネントのレベルで効果を持つ。例えば、Migration の履歴管理テーブル、Session テーブル、その他の ActiveRecord テーブルにおいて、スキーマを明示しない場合は myschema がデフォルトとして使用されるようになる。例えば、user テーブルは myschema.user テーブルとして解釈される。

search_path の設定は PostgreSQL のコマンドのレベルで効果を持つ。これを設定すると、低レベルで直接的にデータベースにアクセスするコンポーネントにおいて、スキーマを明示しないテーブルのデフォルトのスキーマが決定される。例えば、migration でスキーマを明示せずに指定したテーブルが myschema の下に作成される。RBAC においても、auth_item 等のテーブルが myschema 下にあるものとして扱われる。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?