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规则中返回。