如何在视图上写一个简单的更新规则,该视图只是将给定的更新转发到视图所代表的表

时间:2013-09-01 17:29:02

标签: postgresql postgresql-9.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语句。如何在最通用的方式(因此不限制实际更新的方式)中正确执行此操作?

2 个答案:

答案 0 :(得分:3)

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

在先前版本中,指定UPDATE中的所有列。没有通配符。

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

答案 1 :(得分:1)

据我所知,这样做是不可能的,你必须写actual command

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;

也可以使用触发器执行您想要的操作 - 检查thisthis链接。