Задать вопрос

Почему Yii2 не использует defaultSchema в PostgreSQL?

Есть VPS: Debian 8.3, NGINX 1.8, FPM, PHP7, PostgreSQL 9.4, Yii2.
Есть сайт и копия на поддомене: site.io, dev.site.io
В БД есть 2 схемы: public и developer.

Основной сайт работает на схеме public, всё супер.
Создал поддомен dev и встала острая необходимость
удалить все данные из БД. Создал схему developer
с аналогичной структурой, как на public

В конфиге Yii прописал:

db => [
    ...
    'schemaMap' => [
        'pgsql'=> [
            'class'=>'yii\db\pgsql\Schema',
            'defaultSchema' => 'developer',
        ]
    ],
];


  • Очистил таблицы на схеме developer
  • Очистил кэш
  • Отключил кэширование запросов
  • Отключил кэширование схемы

Внимание, вопрос!
Почему сайт на поддомене продолжает выводить данные из схемы public?!

  • На обоих сайтах для подключения используется один логин и пароль
  • При выполнении запросов в консоли, с явным указанием схемы в запросе всё работает как надо
  • $table->fullName в yii/db/pgsql/schema выводит developer.tablename, т.е. запросы должны идти явно к нужной схеме


В принципе, если в /etc/postgresql/9.4/main/postgresql.conf
раскомментировать параметр search_path и прописать в него нужные схемы,
то всё будет ок. Но я считаю, что это какая-то анальная боль!

Или я не прав, жизнь - боль и всё так и должно быть?
Помогите разобраться пожалуйста!
  • Вопрос задан
  • 895 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Схемы базы были сделаны не для того.
Сделайте для dev именно отдельного пользователя и отдельную базу данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Insolita
@Insolita
Отчаянная домохозяйка
в конфиге
'db'=>[
         'class' => 'yii\db\Connection',
         .....
        'schemaMap' => [
                'pgsql' => [
                'class' => 'yii\db\pgsql\Schema',
                'defaultSchema' => 'myschema', //specify your schema here
                ]
        ],
         'on afterOpen' => function ($event) {
                $event->sender->createCommand("SET search_path TO myschema")->execute();
         }
]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы