我得到了一张表
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语句。如何在最通用的方式(因此不限制实际更新的方式)中正确执行此操作?
答案 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;