【问题标题】:Retrieve returning row of INSERT in PL/pgSQL在 PL/pgSQL 中检索返回的 INSERT 行
【发布时间】:2015-09-13 00:40:17
【问题描述】:
我在 PostgreSQL 数据库中有一个名为 test 的表,其中包含 id、data 列。
我创建了一个名为insert_test 的触发器AFTER INSERT,用于启动同名函数。
来自 PHP 的插入 SQL 是这样的:
insert into test (data) values ('try') returning 'variables' as temp;
如何在 PL/pgSQL 函数内访问 temp 中的结果值?
【问题讨论】:
标签:
php
sql
postgresql
triggers
plpgsql
【解决方案1】:
这个查询有点模棱两可,所以我的回答是笼统的。 RETURNING 子句的结果是动态计算的,并立即发送给客户端。所以你不能从 PL/pgSQL 中触及这些值。但是表中的所有值都可以通过记录变量NEW or OLD 在触发器函数中使用 - 因此您可以重新计算任何表达式。
CREATE TABLE foo(a int, b int);
CREATE OR REPLACE FUNCTION foo_trig()
RETURNS TRIGGER AS $$
BEGIN
RAISE NOTICE '<<%>>', NEW.a + NEW.b;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER foo_t AFTER INSERT ON foo
FOR EACH ROW EXECUTE PROCEDURE foo_trig();
postgres=# INSERT INTO foo VALUES(10,20) RETURNING a + b;
NOTICE: <<30>>
┌──────────┐
│ ?column? │
╞══════════╡
│ 30 │
└──────────┘
(1 row)