根据文档:
PL/Python 仅可用作“不受信任”的语言,这意味着它不提供任何方式来限制用户可以在其中执行的操作,因此被命名为 plpythonu。如果在 Python 中开发了安全执行机制,那么将来可能会出现可信变体 plpython。
为什么为 Python 开发安全执行机制却很难,而为其他语言(如 Perl)开发安全执行机制却没有?
随着我获得更多 PostgreSQL 经验,我开始质疑 PLPython 的存在。它被认为是一种“不受信任”的语言https://www.postgresql.org/docs/10/plpython.html
我想知道的是,何时或为什么有人需要使用它?PLPGSQL 已经是一种非常强大的语言,可以让您做很多事情。这里有人需要使用它吗?如果需要,用途是什么?
作为 postgres 用户,create extension plpython3u;
我的数据库中有
然后我已将其设置plpython3u
为受信任:select lanpltrusted from pg_language where lanname like 'plpython3u';
返回 true
但是当我的 db_user 尝试
create function check_data_valid(id bigint)
returns boolean
as $$
-- ...
return true
$$ language plpython3u;
Run Code Online (Sandbox Code Playgroud)
我得到了错误: permission denied for the language plpython3u
所以,我的Postgres的用户,然后我曾尝试:grant usage on plpython3u to db_user
和grant execute on plpython3u to db_user
,但都返回错误:
relation python doesn't exist
也许是因为它是一个扩展......但是,我不知道该怎么做才能创建我的存储过程。
我正在尝试安装支持在 postgresql 中编写 python 的扩展“plpython3u”。
CREATE EXTENSION plpython3u;
错误:
SQL 错误 [22023]:错误:Amazon RDS 不支持扩展“plpythonu”详细信息:安装扩展“plpythonu”失败,因为它不在 Amazon RDS 支持的扩展列表中。
提示:Amazon RDS 允许具有 rds_superuser 角色的用户安装支持的扩展。请参阅:SHOW rds.extensions;
你能推荐一个解决方案吗?
我们正在运行以下版本的 postgresql:
x86_64-pc-linux-gnu 上的 PostgreSQL 12.7,由 gcc (GCC) 7.3.1 20180712 (Red Hat 7.3.1-12) 编译,64 位