问题标签 [plpython]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
postgresql - 如何将此 PostgreSQL 函数从 PL/Py 转换为 PL/SQL?
我有一个用 PL/Python 编写的函数。它是一个在 Python 中运行的数据库函数,这是允许的,因为通过以下方式安装了一种过程语言:
(我发现了一个很好的技巧,允许非管理员用户运行,通过使用一个唯一的名称,虽然它与我的问题没有太大关系,我相信你们中的一些人会想知道我是如何做到这一点的,所以下面是答案)
现在到手头的问题,我上面的“hack”对我有用,但是如果我想使用亚马逊的 RDS 服务,我无法安装语言,并且 PL/Python 不可用。然而,SQL 是。
因此,我需要帮助将以下用 Python 编写的函数翻译成纯 SQL。
此功能允许我执行以下查询:
或者
另外,作为一个旁注/次要问题,在我创建函数之后,当我查看 DDL 时,其中有一行写着“安全调用者”,有人知道这意味着什么吗?
python - 数组函数返回空
这里的目的是调整这个答案以返回数组而不是setof 数据类型。
编辑
笔记
这是一个关于“将 Python 与 PostgreSQL 一起使用”的问题。
我使用PLpythonU是因为员工使用 Python,而且 CSV 很复杂,需要可靠的(多年测试)算法。
不需要解决方法,因为正在使用一个简单的解决方法:
python - 如何将此 plpythonu 存储过程插入数据库?
我正在尝试从标准输入读取行,并使用 plpythonu 存储过程将这些行中的数据插入到 PostgreSQL 数据库中。
当我在 Python 3 下调用该过程时,它会运行(为读取的每一行消耗一个序列值),但在 db 中不存储任何数据。当我从 psql 调用相同的过程时,它工作正常,在 db 中插入一行。
例如:
操作:SELECT sl_insert_day('2017-01-02', '05:15');
以用户 jazcap53 从 psql 中运行
结果:插入 day_id 为 1 的日期。
行动:python3 src/load/load_mcv.py < input.txt
在命令行运行
结果:没有插入,但消耗了 2 个串行 day_id。
操作:SELECT sl_insert_day('2017-01-03', '06:15');
以用户 jazcap53 从 psql 中运行
结果:插入 day_id 为 4 的日期。
文件:输入.txt:
输出:
我正在运行 Fedora 25、Python 3.6.0 和 PostgreSQL 9.5.6。
非常感谢任何可以帮助我的人!
下面是一个重现此行为的 MCV 示例。我希望我的问题出现在第 8 步或第 6 步中——为了完整性,包括了其他步骤。
用于创建 MCV 的步骤:
步骤 1) 创建数据库:
在 psql 中作为用户 postgres,
创建数据库 sl_test_mcv;
步骤 2) 数据库初始化:
文件:db/database_mcv.ini
步骤 3) 运行数据库配置:
文件:db/config_mcv.py
步骤 4) 创建表:
文件:db/create_tables_mcv.sql
步骤 5) 创建语言:
步骤 6) 创建程序:
文件:db/create_procedures_mcv.sql
步骤 7) 授予权限:
文件:db/grant_privileges_mcv.sql
步骤 8) 以 python3 src/load/load_mcv.py < input.txt 运行程序:
文件:src/load/load_mcv.py
json - Postgresql 函数 plpython 选择 json 值
我正在使用 postgresql 9.6。我构建了一个函数,我在其中执行“选择”,例如:
请求工作正常,但结果包含键和值,而不仅仅是值。其实结果是这样的:{"key":2937}
我只想要价值。
postgresql - 如何实现获取整行的PostgreSQL函数?
例如,我想计算表中每一行的空字段。
我应该使用什么参数类型声明?
我尝试了复合类型(表名作为类型):
但如果我这样称呼它,它与参数类型不匹配:
postgresql - 在没有“--with-python”参数的情况下编译数据库后,有没有办法安装 PL/Python?
Ubuntu 14.04.3、PostgreSQL 9.6
也许我可以从 PostgreSQL 9.6 源代码或其他地方获取 plpythonu 源代码,将其放入/contrib
目录中,make
然后CREATE EXTENSION
!?或类似的东西。不想认为 PostgreSQL 重新安装是我唯一的方法。
postgresql - 如何指示 postgresql plpython 函数参数可以是任何类型?
我正在使用(或尝试)以下功能:
正如我没想到的那样,这不起作用。Postgres 抱怨:
嗯......这很愚蠢,因为本机 Python 函数可以接受任何类型的任何内容,因为变量只是事物的名称。
在这种情况下,我不在乎值的实际类型是什么,我只想能够替换它。我怎样才能在 Postgres/PLPython 中做这样的事情?
python - 如何针对自定义 Postgresql(例如 PG_CONFIG)构建和安装 PL/Python?
我正在使用 PipelineDB,它是 Postgresql 的一个定制但兼容的分支。我想将 plpythonu.control 安装到其中,以便能够将 PL/Python 用于用户定义的函数。
我应该针对 PipelineDB 安装“构建”plpythonu 扩展,但我找不到 plpythonu 源代码,也找不到任何关于如何“制作”或“构建”它的说明。有人可以指出我正确的方向吗?
python - 在 PostgreSQL 中,`print` 的 plpython(3)u 输出到哪里去了?
当我在 PostgreSQL 中创建以下函数时:
输出不会出现在终端中(使用psql -f ...
)。它会去哪里?
另外,是否有任何简单的方法(可能是扩展)可以为我提供易于使用的输出stdout
/ stderr
?我不想使用select
它,因为它围绕着所有带有表格装饰的输出,您可以将其关闭,但只能使用psql
在函数中不起作用的技巧。同样,我不想使用\echo
,因为这在函数定义中不起作用。
编辑我知道plpy.notice()
,但是那个函数也用很多混乱来包围它的输出。
顺便说一句,我现在的解决方案是写入文件:
并在后台运行一条尾巴(使用 ANSI 颜色,耶!):
但缺点是我需要外部代码来设置这个东西。
postgresql - 从 PL/Python 函数中访问 PostgreSQL 函数
有没有办法从 PL/Python 函数中访问 PostgreSQL 函数?
当我在 PL/pgSQL 中编写时,我可以直接调用它们。例如,我可以在 PL/pgSQL 中编写 char_length('Bob'),它会使用内置的 PostgreSQL 函数 char_length。当我为 PL/Python 尝试时,char_length 的错误是未定义的。是否有可以访问内置函数的命名空间?plpy.functions.whatever 或类似的东西?
我在 PostgreSQL 9.5.9 上使用 plpython3u。