如何在 plpgsql 函数中获取表的关键字段?
Posted
技术标签:
【中文标题】如何在 plpgsql 函数中获取表的关键字段?【英文标题】:How to get the key fields for a table in plpgsql function? 【发布时间】:2009-12-31 09:31:47 【问题描述】:我需要创建一个函数,在每次 UPDATE 和 INSERT 操作后触发,并检查执行操作的表的关键字段与某些条件。
函数(和触发器)必须是通用的,它不应该有硬编码的表名/字段名。
我在需要访问表名及其架构部分的部分卡住了 - 检查哪些字段是 PRIMARY KEY 的一部分。
【问题讨论】:
【参考方案1】:在获得第一个答案中已经发布的主键信息后,您可以检查http://github.com/fgp/pg_record_inspect 中的代码以在 PL/pgSQL 中动态获取记录字段值。
【讨论】:
【参考方案2】:看看How do I get the primary key(s) of a table from Postgres via plpgsql?里面的答案应该能帮到你。
【讨论】:
【参考方案3】:请注意,您不能在 PL/pgSQL 中使用动态 SQL;它是一种过于强类型的语言。使用 PL/Perl 会更幸运,您可以在其中访问列的散列并使用常规 Perl 访问器来检查它们。 (PL/Python 也可以,但遗憾的是,这只是一种不受信任的语言。PL/Tcl 也可以。)
在 8.4 中,您可以使用 EXECUTE 'something' USING NEW
,在某些情况下可以完成这项工作。
【讨论】:
很棒的信息,谢谢。我想我会坚持使用 PL/Perl。以上是关于如何在 plpgsql 函数中获取表的关键字段?的主要内容,如果未能解决你的问题,请参考以下文章
如何在执行 SELECT... 语句时将表列传递给 plpgsql 函数