在主键上使用PostgreSQL序列的Doctrine更新架构

时间:2014-08-17 17:40:36

标签: postgresql symfony doctrine

我试图将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错误,但我可能错过了一些东西。这是在Symfony 2.5.2下运行的最新2.4.X版本的Doctrine。

1 个答案:

答案 0 :(得分:7)

* @ORM\GeneratedValue(strategy="IDENTITY")