我遇到了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表的表中会出现此错误。
感谢您的合作。
答案 0 :(得分:1)
Offhand我说Symfony没有引用它提交给PostgreSQL的SQL中的标识符。您可以通过SQL跟踪来验证这一点;请参阅log_statement的文档。与SQL Server以外的任何DBMS一样,如果使用引号创建标识符,则必须在引用它们的所有后续SQL中引用这些标识符。
我对Symfony一无所知,但它可能有一个强制使用带引号的标识符的选项,或者至少允许您手动强制引用您的标识符名称。
如果它没有,并且您无法触摸PROD表,那么您就会陷入困境。看起来PostgreSQL对updateable views的支持有限。您可以将视图和规则结合起来以完成您之后的操作,但它可能很难看。首先尝试使用Symfony方法。