使用Symfony2和postgres引用标识符问题

时间:2012-07-04 15:59:08

标签: postgresql symfony quotes quote

我遇到了symfony2和postgres的问题。我有一个包含大写表格和序列的数据库,我无法修改。

我已经生成了实体(逆向工程),引用了标识符,当我尝试进行任何类型的修改时(php app / console doctrine: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表的表中会出现此错误。

感谢您的合作。

1 个答案:

答案 0 :(得分:1)

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

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

如果它没有,并且您无法触摸PROD表,那么您就会陷入困境。看起来PostgreSQL对updateable views的支持有限。您可以将视图和规则结合起来以完成您之后的操作,但它可能很难看。首先尝试使用Symfony方法。