主键上带有PostgreSQL序列的条令更新模式

主键上带有PostgreSQL序列的条令更新模式,postgresql,symfony,doctrine,Postgresql,Symfony,Doctrine,我正试图在PostgreSQL中围绕一个遗留数据库表包装一个条令模型,该表具有: Column | Type | Modifiers ------------+--------------------------+------------------------------------------------------ id | in

我正试图在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;
我仍然得到
删除默认值

ALTER TABLE table_name ALTER id DROP DEFAULT;
对于这个问题,是否有一个仍然允许使用模式更新工具的解决方法?我找不到与此相关的条令错误,但我可能遗漏了什么。这是Symfony 2.5.2下运行的最新2.4.X版本的条令。

试试看

*@ORM\GeneratedValue(strategy=“IDENTITY”)

试试看

*@ORM\GeneratedValue(strategy=“IDENTITY”)

这确实是我们解决问题的方法(我在本PR中详细讨论了这一点:)。尽管文档建议(ed?)选择
AUTO
将导致PostgreSQL的
SERIAL
实现,但事实证明它映射到了
SEQUENCE
。因此,正确的选择当然是,
identity
。在我看来,这似乎降低了存储引擎之间的可移植性,但仍然是一个令人满意的解决方案。这确实为我们解决了这个问题(我在本PR中详细讨论了它:)。尽管文档建议(ed?)选择
AUTO
将导致PostgreSQL的
SERIAL
实现,但事实证明它映射到了
SEQUENCE
。因此,正确的选择当然是,
identity
。对我来说,这似乎降低了存储引擎之间的可移植性,但仍然是一个令人满意的解决方案。