Я пытаюсь обернуть модель Doctrine вокруг устаревшей таблицы базы данных в PostgreSQL, которая имеет:
Column | Type | Modifiers
------------+--------------------------+------------------------------------------------------
id | integer | not null default nextval('table_name_id_seq'::regclass)
Если я попробую сопоставление вроде:
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", unique=true)
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
Затем инструмент обновления схемы дает мне следующее:
ALTER TABLE table_name ALTER id DROP DEFAULT;
Если я попытаюсь явно определить значение по умолчанию, например:
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", unique=true, options={"default"="nextval('table_name_id_seq'::regclass)"})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
Тогда еще дает:
ALTER TABLE table_name ALTER id SET DEFAULT nextval('table_name_id_seq'::regclass);
ALTER TABLE table_name ALTER id DROP DEFAULT;
И, наконец, если я попытаюсь указать последовательность вручную:
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer", unique=true)
* @ORM\GeneratedValue(strategy="SEQUENCE")
* @ORM\SequenceGenerator(sequenceName="table_name_id_seq", initialValue=1, allocationSize=1)
*/
private $id;
Я все еще получаю DROP DEFAULT
:
ALTER TABLE table_name ALTER id DROP DEFAULT;
Есть ли способ решения этой проблемы, который по-прежнему позволяет использовать инструмент обновления схемы? Мне не удалось найти ошибку Doctrine, связанную с этим, но, возможно, я что-то пропустил. Это последняя версия Doctrine 2.4.X, работающая под управлением Symfony 2.5.2.
AUTO
приведет кSERIAL
реализации PostgreSQL, оказывается, что вместо этого он отображается наSEQUENCE
. Так что правильный выбор, конечно же,IDENTITIY
. Мне кажется, что это снижает переносимость между механизмами хранения, но, тем не менее, было удовлетворительным решением. 07.09.2015