pg使用python编写存储过程_postgresql – 可以在Postgres Python存储过程中使用NLTK

本文介绍了如何在PostgreSQL的PL/Python存储过程中使用Python的NLTK库,强调了在数据库环境中使用该库的安全性和潜在限制。通过示例展示了NLTK库的功能,并提醒注意避免在后端执行可能影响数据库性能的操作。
摘要由CSDN通过智能技术生成

您可以在PL / Python存储过程或触发器中使用几乎任何Python库.

概念

要理解的关键点是PL / Python是CPython(无论如何都在PostgreSQL中包括9.3);它使用与普通独立Python完全相同的解释器,它只是将它作为库加载到PostgreSQL支持的.有一些限制(如下所述),如果它适用于CPython,它可以与PL / Python一起使用.

如果您的系统上安装了多个Python解释器 – 版本,发行版,32位与64位等 – 您可能需要确保在运行distutils脚本等时将扩展和库安装到正确的解释器中,但这是关于它.

由于您可以加载任何可用于系统Python的库,因此没有理由认为NLTK会成为一个问题,除非您知道它需要在PostgreSQL后端中不真正推荐的线程之类的东西. (果然,我尝试了它并且它“正常工作”,见下文).

一个可能的问题是像NLTK这样的东西的启动开销可能很大,你可能想要在postmaster中预加载PL / Python并在你的设置代码中导入模块,以便在后端启动时准备就绪.理解postmaster是所有其他后端fork()的父进程,所以如果postmaster预加载了后端可用的东西,大大减少了开销.无论如何测试性能.

安全

因为您可以通过PL / Python加载任意C库,并且因为Python解释器没有真正的安全模型,所以plpythonu是一种“不受信任”的语言.作为postgres用户,脚本可以完全和不受限制地访问系统,并且可以简单地绕过PostgreSQL中的访问控制.出于明显的安全原因,这意味着PL / Python函数和触发器可能只能由超级用户创建,尽管GRANT普通用户能够运行由超级用户安装的精心编写的函数是非常合理的.

好处是你可以在普通的Python中做很多事情,记住Python解释器的生命周期是数据库连接(会话)的生命周期.不建议使用线程,但大多数其他事情都没问题.

PL / Python函数必须使用仔细的输入卫生编写,必须在调用SPI以运行查询时设置search_pa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值