主键上带有PostgreSQL序列的条令更新模式
我正试图在PostgreSQL中围绕一个遗留数据库表包装一个条令模型,该表具有:主键上带有PostgreSQL序列的条令更新模式,postgresql,symfony,doctrine,Postgresql,Symfony,Doctrine,我正试图在PostgreSQL中围绕一个遗留数据库表包装一个条令模型,该表具有: Column | Type | Modifiers ------------+--------------------------+------------------------------------------------------ id | in
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
。对我来说,这似乎降低了存储引擎之间的可移植性,但仍然是一个令人满意的解决方案。