如何在 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 函数

如何在codeigniter中获取mysql表的字段名?

从 plpgsql 函数中获取 Java ResultSet 的返回值

PostgreSQL plpgsql 获取当前程序 oid

返回查询时如何退出plpgsql函数

在plpgsql中获取光标