2012-07-04 50 views
1

我有Symfony2中和Postgres的一個問題。我有一個數據庫,包含大寫的表格和序列,我無法修改。報價標識符問題與Symfony2中和Postgres

我已經生成了實體(反向工程),引用了標識符,並且當我嘗試進行任何類型的修改時(php應用程序/控制檯原則:schema:update --force),它將返回錯誤:

[PDOException] SQLSTATE [42P01]:未定義表:7錯誤:沒有existe LArelación«base_id_se q» LINE 1:SELECT 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

隨口說說我要說的Symfony是不是在它提交到PostgreSQL的SQL引用標識符。您可以通過獲取SQL跟蹤來驗證這一點;請參閱log_statement的文檔。與任何除SQL Server以外的DBMS一樣,如果使用引號創建標識符,則必須在引用它們的所有後續SQL中引用這些標識符。

我一無所知Symfony的,但它可能有一個選項來強制使用加引號的標識符,或者至少允許你手動強制報價到您的標識符名稱。

如果沒有,你不能碰PROD表,你處於困境之中。看來PostgreSQL只對updateable views提供有限的支持。你可能能夠結合觀點和規則來完成你所追求的內容,但這很可能是醜陋的。首先嚐試Symfony方法。