sql - 如何使用新的 plpgsql 查看可用于访问的属性
问题描述
假设我有一个 PLPGSQL 函数
CREATE OR REPLACE FUNCTION function_name
RETURNS TRIGGER AS ...
BEGIN
PERFORM
1
FROM
table1 t1
JOIN
table2 t2 USING( column_name )
WHERE
t1.column_name = NEW.column_name;
RETURN NEW;
END;
DROP TRIGGER IF EXISTS trigger_name
ON table1;
CREATE TRIGGER trigger_name
BEFORE INSERT ON table1
FOR EACH ROW EXECUTE PROCEDURE function_name;
我注意到只有一些列
table1
可以table2
使用NEW.column_name
. 如何查看可以访问的列的完整列表NEW
?此外,如果有一个列
table1
或者table2
我无法访问NEW
,我怎样才能让它访问NEW
?
解决方案
看看这一行:
BEFORE INSERT ON table1
这告诉您触发器在INSERT ON table1
. 这意味着您将拥有NEW.
, 的任何列的 column_name table1
,而table2
触发器不会更改并且在其上使用OLD
or没有意义NEW
,因此它是非法的。因此,准确地说:NEW
适用于table1
列,不适用于table2
列。
推荐阅读
- javascript - React set Hook 从组件外部的函数调用
- .htaccess - htaccess error404 除了一个文件
- c# - 如何在 C# 中拆分一个大的 ui 项目
- go - 集群模式下的 Redis `TIME` 命令
- android - 在自定义 Camera2 API 上显示一个矩形边界框(覆盖),以便仅捕获框内的图像
- sql-server - 全文搜索 - 包含表 - 排名 0
- java - 使用 Spring JPA 查询从序列中获取 nextval
- javascript - 如何使用 GSAP 让我的 svg 时钟臂与当前时间相对应?
- python - 如何构造一个隐含的概率。python中泊松分布的矩阵
- email - 在 auth0 中禁用 api 的验证邮件