postgresql自定义函数的便利性VS plpgsql

标签 c postgresql plpgsql

我声明我对对象问题的回答是"is",在我的情况下很方便,但我在这里问专家。

我开发了很多 plpgsql 函数,只有一个是用 C 语言开发的,但我已经明白学习曲线肯定更倾斜。

在可能的情况下,我需要一种真正的开发语言,而 plpgsql 有时不是,而且我还需要性能,否则我会查看 python。

但这里的问题。 主要是我需要通过一些选择和连接检索数据,对它们进行详细说明,同时很复杂并返回一个数据表。

从执行时间的角度来看,对于这种用途,c 函数是否更快?

我很感激任何评论

卢卡

最佳答案

But here the question. Mainly I need to retrieve data with some select and join, make elaboration on them, sametimes complex and return a table of data.

为此,我会选择 pl/pgsql,因为它就是为此而设计的。总的来说,pl/pgsql 在它的问题域内表现非常好,我怀疑你可能会通过使用 C 获得明显更好的性能。在某种程度上你可以将你的阐述插入主查询,所有更好的性能方面。

这是假设您的阐述可以使用现有函数完成,而不是大量复杂的数据操作(特别是,比如说,在数据类型(如数组和集合)之间进行转换)。如果是这样的话,我还是会把主要的查询和轻量的操作放在pl/pgsql中,具体需要调优的操作放在C中。这样做的原因有两个:

  1. 这意味着更少的 C 代码,这意味着 C 代码更易于阅读、遵循和证明正确。
  2. 它将关注点分开,以便您可以在其他地方使用类似的操作。

pl/pgsql 对其问题域进行了大量性能调整,重新发明所有这些将在开发和测试中进行大量工作。在某种程度上,您可以利用现有的工具,以更少的努力和更多的保证方式获得所需的性能。

编辑

如果您想编写性能良好的 PL/PGSQL 代码,您希望它是一个具有适度支持逻辑的大型主查询。您可以将查询插入的内容越多越好,并且您可以在 SQL 中进行的详细说明(使用上面提到的可能的 C 函数)越多越好。这不仅意味着更好的性能,还意味着更好的可维护性。正如 ArtemGr 提到的,某些操作在 PL/PGSQL 中非常昂贵。在这些情况下,您希望补充 C 代码以获得所需的性能。

关于postgresql自定义函数的便利性VS plpgsql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20104540/

相关文章:

getop() 中的说明

postgresql - cron 作业从 debian 上的 postgres 中删除旧数据

postgresql - 将记录作为函数参数传递 PL/pgSQL

c - C声明语法

c - 用于为索尼阅读器 prs900 编译/交叉编译 gcc 的 binutils

c - 如何访问asm中的数组?

postgresql - 根据输入数据填充 x、y 或 long、lat 字段,并根据输入创建点

python - 使用 pg_upgrade 从 11.1 升级到 11.6 的 postgres 问题

postgresql - 将值传递给 PL/pgSQL 函数的语法

postgresql - 调用 PL/pgSQL 函数忽略结果