插入简单的Postgres视图

时间:2014-09-22 20:40:06

标签: sql postgresql

Postgres documentation

  

简单视图可自动更新:系统将允许INSERT,UPDATE和DELETE语句以与常规表相同的方式在视图上使用。

然后列出了许多要求。我相信我的观点符合所有这些要求,但如果我尝试插入该视图,我会收到错误:

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。

1 个答案:

答案 0 :(得分:2)

您正在阅读较新版本的PostgreSQL服务器的文档,而不是您正在连接到正在运行的版本(8.4)。

PostgreSQL 9.3中引入了可更新的视图支持。您的psql客户端版本为9.3,但如果连接到8.4服务器,则不会影响服务器端功能。