PLV8的缺点或限制是什么?

8

我正在尝试使用PLV8来编写PostgreSQL的触发器和存储过程。到目前为止,与PLPGSQL相比,我并没有真正看到缺点。特别是在使用JSON时,它似乎比PLPGSQL更智能。如果使用PLV8是否存在已知的缺点或限制?PLV8能否完全替代PLPGSQL?如果有人能分享他的经验,那将非常棒。


我能看到的唯一(非常小的)缺点是:你需要为每个数据库显式地安装它。PL/pgSQL默认情况下始终可用。但只有可以决定它是否是完全替代品:因为这完全取决于您对语言的要求。 - user330315
谢谢。我之所以问这个问题,是因为我想知道是否存在我目前没有考虑到的问题。如果我今天决定在新项目中使用PLV8,并且在3个月后发现有限制,那将是不好的。 - Rainer
1
plpgsql 在本质上使用 SQL 数据类型,这是其他 PL 所没有的易用性优势。如果您计划使用复杂的数据类型,例如 hstoreltree,则必须在 plv8 中处理它们的文本表示。但是它支持数组、组合类型、setof 等,已经相当不错了。 - Daniel Vérité
哦,谢谢,那是一个可能的观点! - Rainer
3个回答

17

PLV8的优缺点与PLPerl、PLPython和其他PL语言相同。

  • 它没有与PostgreSQL引擎集成-处理SQL语句结果可能会更慢。 PLpgSQL完全集成到PostgreSQL引擎中。
  • SQL未集成到语言中-无法对嵌入式SQL进行静态分析。使用PLpgSQL可以实现-static plpgsql_check。
  • 能够更好地进行昂贵的数学计算,字符串和数组的操作通常比PLpgSQL更快。
  • 可以使用为语言开发的库-Perl-CPAN等。
  • JavaScript、Perl、Python是通用语言-因此任何通用任务在那里都很好地实现。
  • PLpgSQL是成熟的语言,专门设计用于在关系数据库环境中操作数据。几乎所有开发人员处理数据所需的功能都在其中。迭代结果、从数据库中提取数据需要较少且更易读的代码。

PLpgSQL是通过SQL语言进行数据操作的完美语言。其他PL更适用于其他任何内容-IO、网络、特殊格式、缓慢的数字计算等。


提到的这种分析是我之前不知道的,谢谢 Pavel。关于性能...与此同时,我阅读了一些文章,得出结论,在“正常”情况下(例如典型的电子商务门户),性能差异非常小。但当然还是有特殊情况的。所以,再次感谢! - Rainer
性能 - 它取决于 - 数据库大小、查询复杂度、返回结果集的大小等。 - Pavel Stehule
如果我编写一个函数,在PLV8函数内循环处理150000行,每行只有一个包含20-100个单词的列,并提取标签,那么在表格上运行时,它会阻塞其他人的执行吗? - PirateApp
1
@PirateApp - 这取决于你要做什么。表格不是数组。如果你只进行读操作,那么你不会阻塞其他用户。 - Pavel Stehule

5

更新:自PLV8 2.3.3(2018-04-27)以来,支持kill信号并且运行良好。缺点是必须自己构建。我们过去三年没有遇到问题,因此没有将代码迁移到Python。

有点晚了,但是您不能终止正在运行的plv8脚本,唯一的方法是重新启动整个postgresql服务器。这是一个巨大的劣势,我们的团队正在考虑迁移到PLpgPython。


0

列举一些PLpgSQL的缺点,主要是在开发速度方面:

  • 语法错误很难解读,形式为“;附近括号不匹配”。我得不到行号或任何有用的上下文。
  • 没有像大多数语言那样有用的lint、prettier、编辑器支持或其他有用的工具。
  • 又是一种需要学习许多怪异特性的语言。
  • 尝试创建JSON对象调用外部API非常困难且容易出错。需要使用许多专门的函数,如json_build_object、json_build_array等,而不只是JS中的{a:2,b:'foo',c}。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接