首页 > 解决方案 > 如何使用新的 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;

  1. 我注意到只有一些列table1可以table2使用NEW.column_name. 如何查看可以访问的列的完整列表NEW

  2. 此外,如果有一个列table1或者table2我无法访问NEW,我怎样才能让它访问NEW

标签: sqlpostgresqlplpgsql

解决方案


看看这一行:

BEFORE INSERT ON table1

这告诉您触发器在INSERT ON table1. 这意味着您将拥有NEW., 的任何列的 column_name table1,而table2触发器不会更改并且在其上使用OLDor没有意义NEW,因此它是非法的。因此,准确地说:NEW适用于table1列,不适用于table2列。


推荐阅读