1

我有一张桌子

CREATE TABLE test (
   id    SERIAL,
   name  character varying NOT NULL,
   PRIMARY KEY (id)
);

一个看法

CREATE VIEW TEST_VIEW AS
SELECT id,name
FROM test;

并且只想将给定的更新队列转发到视图后面的实际表

CREATE RULE TEST_VIEW_UPDATE
AS ON UPDATE TO TEST_VIEW
DO INSTEAD UPDATE TEST;

但是这种方法会导致错误,因为可能缺少 SET 语句。如何以最通用的方式正确执行此操作(因此对实际更新的内容没有限制)?

4

2 回答 2

3

在 PostgreSQL 9.3 上,这将自动运行,无需更改。默认情况下,PostgreSQL 将创建可更新的简单视图。

在以前的版本中,指定UPDATE. 没有通配符。

如果您使用的是 9.1 或更高版本(您应该在每个问题中始终提及 - select version()),您应该使用INSTEAD OF视图触发器而不是规则。

于 2013-09-01T21:54:50.937 回答
1

据我所知,不可能这样做,你必须编写实际命令

CREATE RULE TEST_VIEW_UPDATE
AS ON UPDATE TO TEST_VIEW
DO INSTEAD UPDATE TEST set name = NEW.name, col1 = NEW.col1 where id = NEW.id;

也可以使用触发器做你想做的事情 - 检查这个这个链接。

于 2013-09-01T17:48:53.387 回答