Php 检索PL/pgSQL中INSERT的返回行

Php 检索PL/pgSQL中INSERT的返回行,php,sql,postgresql,triggers,plpgsql,Php,Sql,Postgresql,Triggers,Plpgsql,我在PostgreSQL数据库中有一个名为test的表,其中包含id,data 我在INSERT之后创建了一个名为INSERT\u test的触发器,它启动了一个同名函数 PHP中的insert SQL如下所示: insert into test (data) values ('try') returning 'variables' as temp; 如何访问PL/pgSQL函数中的temp中的结果值?此查询有点含糊不清,因此我的回答将是一般性的。RETURNING子句的结果将动态计算并立即发

我在PostgreSQL数据库中有一个名为
test
的表,其中包含
id
data

我在INSERT之后创建了一个名为
INSERT\u test
的触发器,它启动了一个同名函数

PHP中的insert SQL如下所示:

insert into test (data) values ('try') returning 'variables' as temp;

如何访问PL/pgSQL函数中的
temp
中的结果值?

此查询有点含糊不清,因此我的回答将是一般性的。
RETURNING
子句的结果将动态计算并立即发送给客户端。因此,您不能从PL/pgSQL中接触这些值。但是,表中的所有值都可以通过记录变量在触发器函数中使用,因此您可以重新计算任何表达式

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)
创建表foo(a int,b int);
创建或替换函数foo_trig()
将触发器返回为$$
开始
提出通知“”,新的.a+新的.b;
返回NULL;
结束;
$$语言plpgsql;
在foo上插入后创建触发器foo\u t
对于每一行,执行程序foo_trig();
postgres=#插入返回a+b的foo值(10,20);
注意:
┌──────────┐
│ ?专栏?│
╞══════════╡
│       30│
└──────────┘
(1排)

您甚至可以在存储和返回值之前使用
BEFORE
触发器()来处理这些值。