function - 在执行 INSERT INTO RETURNING 时,在 postgresql 中返回规则中函数的结果

标签 function postgresql insert sql-returning

我有一个包含多个字段的 View 。

当我INSERT INTO 一个 View 时,我运行一个基于INSERT 参数的函数。该函数返回一个值。

如何从规则中检索值?

INSERT RETURNING 给我:

ERROR: cannot perform INSERT RETURNING on relation "full_subntes"
HINT: You need an unconditional ON INSERT DO INSTEAD rule with a RETURNING clause.

例子:

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;

然后我收到上述错误。

最佳答案

这是一个例子。

首先,我们创建一个测试表:

CREATE TABLE test (a integer, b varchar, primary key (a));

然后,我们创建一个 View :

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;

关于function - 在执行 INSERT INTO RETURNING 时,在 postgresql 中返回规则中函数的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2896030/

相关文章:

c - 如何使用指针在另一个函数中分配数组

javascript - 调用存储在变量中的方法而不指定 this

java - 无法验证新建立的连接

postgresql - 按航空公司代码列出的前 3 个延误最多的航类(>1 小时)百分比(列表)

mysql - 在表中插入 2 个值

强制转换为指向函数返回数组的指针 - 允许吗?

python - Python-将函数存储在变量中

unit-testing - 您使用哪些工具/库对您的 PL/PgSQL 进行单元测试

sql - 在 SQL 中插入两个方向相关的 2 行

mysql - mysql 语法错误 - 插入查询