随着我获得更多使用PostgreSQL的经验,我开始怀疑PLPython的存在。它被认为是“不受信任的”语言https://www.postgresql.org/docs/10/plpython.html
我想知道的是,什么时候或者为什么有人需要使用这个?PLPGSQL已经是一种非常强大的语言,允许您做很多事情。这里有人需要使用它吗?如果有,那是为了什么?
发布于 2020-07-23 11:48:03
我发现pl/pgsql对于一般的编程来说是乏味的,在里面编程很慢,执行也很慢。而且缺少了很多功能--其中一些是因为它必须是一种可信任的语言(没有IPC或网络),而另一些仅仅是因为它还没有被构建,而且它缺乏一个库/模块/包的机制。
我使用过plpython3u从数据库中访问化学情报库。从头开始重新实现这些库的功能在理论上是可行的,但完全不切实际。在pl/pgsql中这样做是完全不切实际的平方。
我对plperlu和plperl做了同样的事情,以访问各种CPAN Perl模块。如果这些模块碰巧在python而不是Perl中,我将使用plpythonu而不是plperl(u)。
我还使用了plperl (不是plpythonu,而是因为我更喜欢Perl而不是python)来实现函数,这些函数是我希望通过SQL在数据库中可用的,也是在我们的过程代码中实现的。我本可以在pl/pgsql中实现它们,但是这样做会很麻烦,还意味着它们需要两种语言的实现。或者,我可以在数据库中实现它们,当我想从那里调用函数时,可以通过独立的Perl连接到数据库。但这有时意味着建立一个数据库连接,否则在该程序中将是不必要的,并且将滥用我们有限的资源之一,因为数据库比独立的Perl脚本要难得多。它还会引入延迟。
发布于 2020-07-23 09:01:24
它是不可信的,因为实际上您可以在plpython系统用户下使用来自postgres函数的OS系统调用--读/写文件(包括pgdata目录)和系统进程。所以你应该非常小心。但是,让我向您展示几个plpython可能有用的案例。
plpgsql进行大量的计算是个坏主意。这在plpython中肯定比在plpgsql中要快,因为plpgsql实际上调用一个单独的SELECT语句来计算每个表达式,而plpython不调用。https://dba.stackexchange.com/questions/271326
复制相似问题