Function 在postgresql中,执行INSERT INTO返回时规则中函数的返回结果
我有一个包含多个字段的视图 当我插入视图时,我会根据插入参数运行一个函数。该函数返回一个值 如何从规则中检索值Function 在postgresql中,执行INSERT INTO返回时规则中函数的返回结果,function,postgresql,insert,sql-returning,Function,Postgresql,Insert,Sql Returning,我有一个包含多个字段的视图 当我插入视图时,我会根据插入参数运行一个函数。该函数返回一个值 如何从规则中检索值 插入返回提供了: 错误:无法对关系“完整子节点”执行插入返回 提示:您需要一个带有RETURNING子句的无条件INSERT DO INSTEAD规则 例如: CREATE TABLE test ( a VARCAHR primary key, b VARCHAR, ); CREATE VIEW test_v AS SELECT * FROM test; CREAT
插入返回
提供了:
错误:无法对关系“完整子节点”执行插入返回提示:您需要一个带有RETURNING子句的无条件INSERT DO INSTEAD规则 例如:
CREATE TABLE test (
a VARCAHR primary key,
b VARCHAR,
);
CREATE VIEW test_v AS SELECT * FROM test;
CREATE OR REPLACE RULE Test_v_Insert AS ON INSERT TO Test_v
DO INSTEAD (
SELECT myFunction('param');
);
INSERT INTO test_v(a, b) VALUES ('a', 'b') RETURNING a, b;
然后我得到一个上面描述的错误。为了更新Postgres中的视图,需要定义一个规则,告诉它更新基表。听起来你还没有制定规则 下面是一个例子 首先,我们创建一个测试表:
CREATE TABLE test (a integer, b varchar, primary key (a));
然后,我们创建一个视图:
CREATE OR REPLACE VIEW test_view AS SELECT * FROM test;
接下来,将创建更新规则:
CREATE OR REPLACE RULE rl_test_view_update AS
ON UPDATE TO test_view DO INSTEAD
UPDATE test SET a = NEW.a, b = NEW.b
WHERE test.a = old.a AND test.b = old.b;
最后,这里是插入规则:
CREATE OR REPLACE RULE rl_test_view_insert AS
ON INSERT TO test_view DO INSTEAD
INSERT INTO test VALUES (NEW.a, NEW.b)
RETURNING test.*;
现在可以插入一些测试数据:
INSERT INTO test_view (a, b) VALUES (1,'John Doe') RETURNING a;
并检查插入的元组:
SELECT * FROM test_view;
请发布整个视图定义、执行的操作和所需的结果集,好吗?我需要运行一个函数,函数值为with将在insert规则中返回。简单的插入返回炒锅很好。我创建了一个规则。但是,我需要运行一个函数,该函数的结果将在insert规则中返回。