2014-09-22 25 views
3

Postgres documentation插入到簡單的Postgres的意見

Simple views are automatically updatable: the system will allow INSERT, UPDATE and DELETE statements to be used on the view in the same way as on a regular table.

然後列出了一些要求。我相信,我的看法滿足所有這些要求,但如果我嘗試插入這個觀點,我得到的錯誤:

psql:C355A12.txt:1702: ERROR: cannot insert into a view 
HINT: You need an unconditional ON INSERT DO INSTEAD rule. 

我插入到該視圖的定義爲:

CREATE VIEW locationsView 
    AS SELECT lc_name, lc_min, lc_max, lc_sizeX, lc_sizeY 
    FROM locations; 

這是表的定義:

CREATE TABLE locations(
    lc_name LocationName NOT NULL, 
    lc_min LocationMin NOT NULL 
     DEFAULT 0, 
    lc_max LocationMax NOT NULL 
     DEFAULT 0, 
    lc_sizeX LocationSizeX NOT NULL, 
    lc_sizeY LocationSizeY NOT NULL, 
    PRIMARY KEY (lc_name) 
); 

域的有:

CREATE DOMAIN LocationName AS TEXT; 
CREATE DOMAIN LocationMin AS INT; 
CREATE DOMAIN LocationMax AS INT; 
CREATE DOMAIN LocationSizeX As INT; 
CREATE DOMAIN LocationSizeY As INT; 

如何獲取文檔中描述的「自動更新」?

我正在使用Postgres版本9.3.4。

+0

你能告訴我們表'locations'的定義嗎? – 2014-09-22 20:58:18

+0

@a_horse_with_no_name,位置定義在這裏:https://gist.github.com/anonymous/c354f5d62f7ea6585f30 – Kat 2014-09-22 21:02:26

+0

對不起,這是一個問題,我重命名問題中的字段,以消除問題的噪音。我用一個重現問題的*精確*代碼編輯了問題。我最初沒有提到域,因爲我不相信它們與問題有關(我可以在表中插入罰款,而不是視圖)。我重命名了這些屬性,因爲它們的命名方案對於此類所需的類是必需的。 – Kat 2014-09-22 21:10:18

回答

2

您正在閱讀的PostgreSQL服務器的新版本文檔比連接到運行(8.4)。

在PostgreSQL 9.3中引入了簡單的可更新視圖支持。您的psql客戶端版本爲9.3,但如果連接到8.4服務器,則不影響服務器端功能。