postgresql - 用单行 NEW 替换表以进行查询
问题描述
在我的插入X
表的触发过程中,我想检查某个查询的结果是什么,如果表X
只包含具有当前插入值的单行(NEW
)。
我在过程中尝试了以下操作(简化代码):
WITH X AS (SELECT * FROM NEW)
SELECT * FROM X WHERE …some_conditions…
…但是SELECT * FROM NEW
无效。
我找不到任何“投射”NEW
到桌子上的方法。甚至可能吗?
解决方案
您可以使用SELECT * FROM (VALUES(NEW.*)) AS my_alias;
例子:
CREATE TABLE test_trig_new (
id int4 NULL,
val text NULL,
val2 text NULL
);
CREATE OR REPLACE FUNCTION trig_test_new()
RETURNS trigger
LANGUAGE plpgsql
AS $function$
DECLARE
l_row test_trig_new%rowtype;
BEGIN
SELECT * INTO l_row FROM (VALUES(NEW.*)) AS a;
RAISE NOTICE 'val2 %, record %', l_row.val2, l_row;
RETURN NEW;
END
$function$
;
CREATE TRIGGER trig_test_new
BEFORE INSERT ON test_trig_new
FOR EACH ROW EXECUTE PROCEDURE trig_test_new();
INSERT INTO test_trig_new VALUES (55, 'test55', 'test66423');
--raises NOTICE: val2 test66423, record (55,test55,test66423)
推荐阅读
- c++ - 是否有一个 Qt 小部件看起来像一个标签来显示文本,但如果双击也可以编辑?
- python - Python程序仍在运行但找不到PID
- vba - 将 Access 表导出到 Excel 错误
- php - 在 PHP 中显示生成的 PNG?
- javascript - FileReader.readAsText 的参数 1 不是对象
- amazon-web-services - 亚马逊产品广告 API 搜索错误 - 'itemsearcherrorresponse' 没有其他错误信息
- c - Windows 10 上的多线程性能比 Linux 差很多
- android - RoomDB 文件位置
- ms-access - 使用 Outlook Exchange 通过 VBA 发送电子邮件
- python - 将 pandas Dataframe 转换为 int32 numpy 矩阵