2012-07-04 1 views
1

У меня проблема с symfony2 и postgres. У меня есть база данных с таблицами и последовательностями в верхнем регистре, которые я не могу изменить.Проблема с идентификационными номерами с Symfony2 и postgres

Я сгенерировал сущности (обратный инжиниринг), со ссылкой на идентификаторы, и когда я пытаюсь сделать любой тип модификации (PHP приложения/консоль доктрины: схема: обновление --force), он возвращает ошибку:

[PDOException] SQLSTATE [42P01]: Undefined таблица: 7 ОШИБКА: нет Existe ла relación «base_id_se д» ЛИНИЯ 1: ВЫБОР min_value, increment_by оТ BASE_id_seq

код моей базы Entity является:

namespace Slip\CoreBundle\Entity; 

use Doctrine\ORM\Mapping\ClassMetadata; 
use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Slip\ContactBundle\Entity\Criterion; 
/** 
* Slip\CoreBundle\Entity\Base 
* 
* @ORM\Entity(repositoryClass="Slip\CoreBundle\Repository\BaseRepository") 
* @ORM\Table(name="""BASE""") 
*/ 
class Base 
{ 
    /** 
    * @var bigint $id 
    * 
    * @ORM\Column(name="id", type="bigint", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="SEQUENCE") 
    * @ORM\SequenceGenerator(sequenceName="""BASE_id_seq""", allocationSize=1, initialValue=1) 
    */ 
    private $id; 
    /** 
    * @var string $name 
    * @ORM\Column(name="name", type="string", length=1024, nullable=false) 
    */ 
    private $name; 

..............

Если изменить имя последовательностей в нижнем регистре всех работ, а также изменения применяются к базе данных, но я не могу это сделать в производственной среде

Я не понимаю, почему, если я делаю какие-либо изменения в базе данных, в других таблицах, которые не имеют таблицы BASE, появляется эта ошибка.

Благодарим за сотрудничество.

ответ

1

Оффлайн Я бы сказал, что Symfony не цитирует идентификаторы в SQL, которые он отправляет PostgreSQL. Вы можете проверить это, взяв SQL-трассировку; см. документы для log_statement. Как и в любой СУБД, отличной от SQL Server, если вы создали идентификаторы с кавычками, вы должны указать эти идентификаторы во всех последующих SQL, которые ссылаются на них.

Я ничего не знаю о Symfony, но у него, вероятно, есть возможность принудительно использовать цитируемые идентификаторы или, по крайней мере, позволять вам принудительно вводить кавычки в имена ваших идентификаторов.

Если это не так, и вы не можете коснуться таблиц PROD, вы находитесь в рассоле. Похоже, PostgreSQL имеет ограниченную поддержку для updateable views. Возможно, вы сможете комбинировать взгляды и правила, чтобы выполнить то, что вам нужно, но это, вероятно, будет уродливым. Сначала попробуйте подход Symfony.

Смежные вопросы