1

我对 symfony2 和 postgres 有疑问。我有一个数据库,其中包含大写的表和序列,我无法修改。

我已经生成了实体(逆向工程),引用了标识符,当我尝试进行任何类型的修改时(php app/console 学说:schema:update --force),它返回错误:

[PDOException] SQLSTATE [42P01]:未定义表:7 错误:不存在关联 «base_id_se q» 第 1 行:选择 min_value,increment_by FROM BASE_id_seq

我的基本实体的代码是:

namespace Slip\CoreBundle\Entity;

use Doctrine\ORM\Mapping\ClassMetadata;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Slip\ContactBundle\Entity\Criterion;
/**
 * Slip\CoreBundle\Entity\Base
 *
 * @ORM\Entity(repositoryClass="Slip\CoreBundle\Repository\BaseRepository")
 * @ORM\Table(name="""BASE""")
 */
class Base
{
    /**
     * @var bigint $id
     * 
     * @ORM\Column(name="id", type="bigint", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="SEQUENCE")
     * @ORM\SequenceGenerator(sequenceName="""BASE_id_seq""", allocationSize=1, initialValue=1)
     */
    private $id;
    /**
     * @var string $name
     * @ORM\Column(name="name", type="string", length=1024, nullable=false)
     */
    private $name;

.....................

如果我将序列的名称更改为小写所有作品,并将修改应用于数据库,但我无法在生产环境中执行此操作

我不明白为什么如果我在数据库中进行任何修改,在不是 BASE 表的其他表中会出现此错误。

感谢您的合作。

4

1 回答 1

1

顺便说一句,Symfony 没有在它提交给 PostgreSQL 的 SQL 中引用标识符。您可以通过 SQL 跟踪来验证这一点;请参阅log_statement的文档。与 SQL Server 以外的任何 DBMS 一样,如果您使用引号创建标识符,则必须在引用它们的所有后续 SQL 中引用这些标识符。

我对 Symfony 一无所知,但它可能有一个选项可以强制使用带引号的标识符,或者至少允许您手动在标识符名称中强制使用引号。

如果没有,并且您无法触摸 PROD 表,那么您就处于困境中。似乎 PostgreSQL 对可更新视图的支持有限。你也许可以结合视图和规则来完成你所追求的,但它可能很丑陋。首先尝试 Symfony 方法。

于 2012-07-10T20:44:08.947 回答