2014-09-22 26 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服务器,则不影响服务器端功能。