我今天遇到了一个问题,我想分享解决方案:
doctrine:schema:update
抛出此错误:
Duplicate table: 7 ERROR: the relation abc already exists.
就我而言,这发生在从PostgreSQL 9.4升级到9.5以及从Symfony 2.7升级到2.8之后。
过了一会儿,我发现它与这个问题有某种关系:教义 2.2 想要重新创建我所有的表
详:
- 当对空数据库运行时,
doctrine:schema:update
工作正常(即创建所有内容)。 - 第二次运行时,我收到上面的错误。所以看起来 Doctrine 找不到已经存在的表格。
- 真正奇怪的是:Symfony应用程序可以工作! 即教义原则上确实找到了表格 - 只是在做
schema:update
时没有
的答案 - 感谢@tetranz: 如何指定用于 Doctrine 2.2/Symfony 2.2 和 PostgreSQL 的模式?
- 在 pgAdmin III 中,单击"
File
>Open postgresql.conf
"(此文件位于数据库数据所在的位置)。 - 查找名为
search_path
的设置(它位于顶部)。 - 激活此设置(即单击复选标记)并将其值从
"$user", public
修改为public
我的猜测:
当"正常"运行时,Doctrine 确实会找到该表,因为我确实在配置文件 (*.yml) 中指定了架构。但是当查找带有schema:update
的表时,Doctrine 省略了模式,从而回退到 PostgreSQL 的默认搜索路径,即"$user"
(即当前 PostgreSQL 用户的用户名,通常postgres
)。所以对我来说,这看起来像一个教义错误。