2016-02-09 5 views
0

я столкнулся с проблемой сегодня, для которой я хотел бы поделиться решением:доктрина: схема: обновление дает ошибку «отношение а уже существует»

doctrine:schema:update выдает эту ошибку:

Duplicate table: 7 ERROR: the relation abc already exists. 

В моем случае это произошло после обновления с PostgreSQL 9.4 до 9.5 и от Symfony 2.7 до 2.8.

Через некоторое время я узнал, что это как-то связано с этим вопросом: Doctrine 2.2 wants to recreate all my tables

Детали:

  • При работе с пустой базой данных, doctrine:schema:update работает отлично (т.е. создает все).
  • При работе во второй раз, я получаю ошибку выше. Так что похоже, что Doctrine не может найти уже существующие таблицы.
  • И действительно странно: приложение Symfony работает! То есть Учение делает найти таблицы в принципе - только не тогда, когда делать schema:update

ответ

0

Вот мой ответ - благодаря @tetranz: How do I specify which schema to use for Doctrine 2.2/Symfony 2.2 and PostgreSQL?:

  1. В pgAdmin III, нажмите File>Open postgresql.conf (этот файл где находятся данные вашей базы данных).
  2. Ищите настройку с именем search_path (это скорее вверху).
  3. Включите этот параметр (т.е. нажмите галочки) и измените его значение из "$user", public в public

Мое предположение:
При запуске «нормально», доктрина не найдет таблицу, так как я сделал указать схему в файлы конфигурации (* .yml). Но при поиске таблиц с schema:update, Doctrine опускает схему, возвращаясь обратно к пути поиска по умолчанию PostgreSQL, который равен "$user" (то есть имя пользователя текущего пользователя PostgreSQL, обычно postgres). Поэтому для меня это похоже на ошибку Doctrine.