Проблема с идентификаторами котировок в Symfony2 и postgres

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

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

[PDOException] SQLSTATE[42P01]: Неопределенная таблица: 7 ОШИБКА: не существует отношения «base_id_se q» СТРОКА 1: ВЫБРАТЬ min_value, increment_by FROM BASE_id_seq

Код моей базовой сущности:

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, появляется эта ошибка.

Спасибо за ваше сотрудничество.


person juceveju    schedule 04.07.2012    source источник


Ответы (1)


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

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

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

person Brian.D.Myers    schedule 10.07.2012