我需要创建一个在每次 UPDATE 和 INSERT 操作后触发的函数,并检查在某些条件下执行操作的表的关键字段。
该函数(和触发器)需要是一个通用的,它不应该有硬编码的表名/字段名。
我被困在需要访问表名及其模式部分的部分 - 检查哪些字段是 PRIMARY KEY 的一部分。
我需要创建一个在每次 UPDATE 和 INSERT 操作后触发的函数,并检查在某些条件下执行操作的表的关键字段。
该函数(和触发器)需要是一个通用的,它不应该有硬编码的表名/字段名。
我被困在需要访问表名及其模式部分的部分 - 检查哪些字段是 PRIMARY KEY 的一部分。
在获得第一个答案中已经发布的主键信息后,您可以检查http://github.com/fgp/pg_record_inspect中的代码以在 PL/pgSQL 中动态获取记录字段值。
看看如何通过 plpgsql 从 Postgres 获取表的主键?那个答案应该可以帮助你。
注意你不能在 PL/pgSQL 中使用动态 SQL;它是一种过于强类型的语言。使用 PL/Perl 会更幸运,您可以在其中访问列的散列并使用常规 Perl 访问器来检查它们。(PL/Python 也可以,但遗憾的是,这只是一种不受信任的语言。PL/Tcl 也可以。)
在 8.4 中,您可以使用EXECUTE 'something' USING NEW
,在某些情况下可以完成这项工作。