在 postgresql 中使用 plpgsql 有啥好处

Posted

技术标签:

【中文标题】在 postgresql 中使用 plpgsql 有啥好处【英文标题】:what are the advantages of using plpgsql in postgresql在 postgresql 中使用 plpgsql 有什么好处 【发布时间】:2008-10-29 15:42:09 【问题描述】:

除了语法糖和表达能力之外,运行时效率的差异是什么。我的意思是,plpgsql 可以比 plpythonu 或 pljava 更快?还是它们都近似相等?

我们正在使用存储过程来检测中等大小的数据库(大约 1000 万条记录)中几乎重复的人员记录

【问题讨论】:

你能告诉我们更多关于这个系统的信息吗?根据您和您的团队使用的语言和架构选择,人们可能会获得更好的建议。 【参考方案1】:

plpgsql 提供了更好的类型安全性我相信,如果你想使用两个相似类型的不同列执行操作,你必须执行显式转换,比如 varchar 和 text 或 int4 和 int8。这很重要,因为如果您需要存储的 proc 使用索引,postgres 要求类型在连接条件之间完全匹配(编辑:我认为也用于相等性检查)。

虽然其他语言中可能有此功能,但我没有使用它们。无论如何,我希望这能为您的调查提供一个更好的起点。

【讨论】:

【参考方案2】:

plpgsql 与 SQL 很好地集成 - 源代码应该非常干净和可读。对于 PLJava 或 PLPython 等 SQL 语言,必须隔离 SQL 语句 - SQL 不是语言的一部分。所以你必须写更多的代码。如果你的过程有很多 SQL 语句,那么 plpgsql 过程应该更干净、更短并且更快一点。当您的过程没有 SQL 语句时,来自外部语言的过程可以更快 - 但外部语言(解释)需要一些时间来初始化 - 所以对于简单的任务,SQL 或 plpgsql 语言的过程应该更快。

当您需要访问网络、访问文件系统等功能时使用外部语言 - http://www.postgres.cz/index.php/PL/Perlu_-_Untrusted_Perl_%28en%29

据我所知 - 人们通常使用 PL 语言的组合 - (SQL,plpgsql, plperl) 或 (SQL, plpgsql, plpython)。

【讨论】:

【参考方案3】:

如果不进行实际测试,我希望 plpgsql 比其他语言更高效,因为它很小。话虽如此,请记住 SQL 函数可能比 plpgsql 更快,如果一个函数足够简单,您可以只用 SQL 编写它。

【讨论】:

在我使用 plperl 或 plpgsql 以外的东西进行的测试中,当它不是 SQL 相关逻辑时效果很好。例如循环或进行计算 plperl 在我有限的测试中总是使用 plpgsql。

以上是关于在 postgresql 中使用 plpgsql 有啥好处的主要内容,如果未能解决你的问题,请参考以下文章

在 plpgsql(PostgreSQL 的)中,可以将 CTE 保留到外循环吗?

如何在 PostgreSQL 9.2 中分析 plpgsql 函数

Postgresql 10 plpgsql 测试列是不是存在于记录变量中

PostgreSQL plpgsql 获取当前程序 oid

Postgresql plpgsql 多行循环

PostgreSQL - 继续 unique_violation (plpgsql)