我需要在pl/python函数中导入第三方模块.似乎pl/python使用的内部python没有任何第三方模块.
我遇到这种错误:
ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed
DETAIL: <type 'exceptions.ImportError'>: No module named lucene
********** Error **********
ERROR: PL/Python: PL/Python function "to_tsvector_luc" failed
SQL state: XX000
Detail: <type 'exceptions.ImportError'>: No module named lucene
Run Code Online (Sandbox Code Playgroud)
如何将模块安装到pl/python中,以便我可以从存储过程代码中导入它?
在postgres 9.2中,我试图创建一个可以作为触发器的python程序.我想运行一个外部程序(本地磁盘上的exe),所以我使用python来运行它.当我尝试创建一个这样的简单程序时:
CREATE FUNCTION one ()
RETURNS int
AS $$
# PL/Python function body
$$ LANGUAGE plpythonu;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR: language "plpythonu" does not exist
HINT: Use CREATE LANGUAGE to load the language into the database.
Run Code Online (Sandbox Code Playgroud)
当我跑:
CREATE LANGUAGE plpythonu
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ERROR: could not access file "$libdir/plpython2": No such file or directory
Run Code Online (Sandbox Code Playgroud)
我使用的是Windows 7和python 2.5.
我在许多地方看过但找不到解决方案.
有任何想法吗?
我有大量苏格兰和威尔士的重音地名(结合严重,急性,旋律和暗音),我需要更新到他们的unicode规范化形式,例如,更短的形式00E1(\ xe1)á代替0061 + 0301(\X61\X301)
我从2009年的一个旧的Postgres nabble邮件列表中找到了一个解决方案,使用pl/python,
create or replace function unicode_normalize(str text) returns text as $$
import unicodedata
return unicodedata.normalize('NFC', str.decode('UTF-8'))
$$ LANGUAGE PLPYTHONU;
Run Code Online (Sandbox Code Playgroud)
这正如预期的那样有效,但让我想知道是否有任何方法可以直接使用内置的Postgres函数.我尝试使用convert_to进行各种转换,都是徒劳的.
编辑:正如克雷格指出的那样,我尝试过的其中一件事:
SELECT convert_to(E'\u00E1', 'iso-8859-1');
Run Code Online (Sandbox Code Playgroud)
返回\xe1,而
SELECT convert_to(E'\u0061\u0301', 'iso-8859-1');
Run Code Online (Sandbox Code Playgroud)
失败了 ERROR: character 0xcc81 of encoding "UTF8" has no equivalent in "LATIN1"
我有一个plypython函数,可以做一些json魔法.为此,它显然导入了json库.
每次调用函数时是否调用导入?我必须注意哪些性能影响?
我有许多公司的董事数据,但有时候"XYZ的董事John Smith"和"ABC的董事John Smith"是同一个人,有时他们不是.此外,"XYZ的导演约翰J.史密斯"和"ABC的导演约翰史密斯"可能是同一个人,也可能不是.通常检查附加信息(例如,关于"约翰史密斯,XYZ主任"和"约翰史密斯,ABC主任"的传记数据的比较)使得有可能解决两个观察是否是同一个人.
本着这种精神,我正在收集识别匹配对的数据.例如,假设我有以下匹配对:{(a, b), (b, c), (c, d), (d, e), (f, g)}.我想使用关系"与人相同"的传递属性来生成"连通组件" {{a, b, c, d, e}, {f, g}}.那是{a, b, c, d, e}一个人,{f, g}是另一个人.(该问题的早期版本提到了"派系",这显然是别的东西;这可以解释为什么find_cliques在networkx给出"错误"结果(为了我的目的).
以下Python代码完成了这项工作.但我想知道:是否有更好的(计算成本更低)方法(例如,使用标准或可用的库)?
这里和那里似乎有相关的例子(例如,python中的Cliques),但这些是不完整的,所以我不确定他们指的是什么库或如何设置我的数据来使用它们.
def get_cliques(pairs):
from sets import Set
set_list = [Set(pairs[0])]
for pair in pairs[1:]:
matched=False
for set in set_list:
if pair[0] in set or pair[1] in set:
set.update(pair)
matched=True
break
if not matched:
set_list.append(Set(pair))
return set_list
pairs …Run Code Online (Sandbox Code Playgroud) 我正在尝试为Travis CI中的一些PL/Python PostgreSQL程序设置CI.
我尝试了几种方法:
1)使用遗留的基础设施,我试图假设,PL/Python已经安装,但它没有成功:
The command "psql -U postgres -c 'CREATE EXTENSION plpythonu;'" exited with 1.
0.01s$ psql -U postgres -d test -c 'CREATE LANGUAGE plpythonu;'
ERROR: could not access file "$libdir/plpython2": No such file or directory
Run Code Online (Sandbox Code Playgroud)
2)尝试sudo apt-get update && sudo apt-get -y install postgresql-plpython-9.4在开头添加命令.它也失败了,因为这个命令开始替换已经安装在Travis环境中的PostgresSQL 9.4.
3)还试图在配置中使用基于容器的基础设施:
addons:
postgresql: "9.4"
apt:
packages:
- postgresql-plpython-9.4
Run Code Online (Sandbox Code Playgroud)
也没有成功.
在Travis CI中测试PL/Python过程的好方法是什么?
我想在postgresql上安装plpython以获得python触发器
当我恢复我的数据库(我的数据库有一些python触发器)这个错误apears(错误消息太大所以我粘贴它的第一行):
C:/Program Files/PostgreSQL/9.0/bin/pg_restore.exe
--host localhost
--port 5432
--username "postgres"
--dbname "mfa"
--verbose
"%HOMEPATH%/Desktop/EhSAA/MFA/db_schema/mydb.backup"
pg_restore: connecting to database for restore
pg_restore: creating SCHEMA public
pg_restore: creating COMMENT SCHEMA public
pg_restore: creating PROCEDURAL LANGUAGE plpgsql
pg_restore: creating PROCEDURAL LANGUAGE plpythonu
pg_restore: [archiver (db)] Error while PROCESSING TOC:
pg_restore: [archiver (db)] Error from TOC entry 315; 2612 16595
PROCEDURAL LANGUAGE plpythonu postgres
pg_restore: [archiver (db)] could not execute query:
ERROR: could not load library "C:/Program Files/PostgreSQL/9.0/lib/plpython.dll":
The specified module could not be …Run Code Online (Sandbox Code Playgroud) 我需要安装plpython,因为我收到了错误
could not access file "$libdir/plpython2": No such file or directory
Run Code Online (Sandbox Code Playgroud)
当试图做python manage.py migrate时.我已经看到了关于如何安装这个软件包的不同建议,但没有一个对我有用,因为我需要使用python版本2.7(有些人建议安装python 3.2),我不能运行sudo apt-get install ...因为我必须是在mac上工作.
我试过跑步
CREATE LANGUAGE plpython2u;
Run Code Online (Sandbox Code Playgroud)
但我得到了错误
ERROR: could not access file "$libdir/plpython2": No such file or directory
Run Code Online (Sandbox Code Playgroud)
另外,我试过了pip/brew install plpython.但没有结果.有什么建议?
当我在 PostgreSQL 中创建以下函数时:
create function log( value variadic text[] )
returns void
language plpython3u
as $$
print( ' '.join( value ) + '\n' )
$$;
do $$ begin perform log( ( 42 + 108 )::text ); end; $$;
Run Code Online (Sandbox Code Playgroud)
输出未出现在终端中(使用psql -f ...)。它会去哪里?
此外,是否有任何简单的方法(可能是扩展)可以为我提供易于使用的输出stdout/ stderr?我不想使用,select因为所有输出都带有表装饰,您可以关闭它,但只能使用psql在函数中不起作用的技巧。同样,我不想使用\echo,因为这在函数定义中不起作用。
编辑我知道plpy.notice(),但该功能也将其输出包围在一大堆混乱中。
顺便说一句,我现在的解决方案是写入文件:
create function log( value variadic text[] )
returns void
language plpython3u
as $$
with open( '/tmp/psql-output', 'a' ) as o:
o.write( …Run Code Online (Sandbox Code Playgroud) 我运行完全相同的Python函数,一个作为PostgreSQL PL/Python,另一个作为通常的Python脚本在PostgreSQL之外运行.
令人惊讶的是,当我使用PostgreSQL PL/Python时select * from pymax7(20000);,它平均需要65秒,而当我调用通常的Python脚本时,python myscript.py 20000它平均需要48秒.计算运行查询和脚本10次的平均值.
是否应该有这样的差异?PostgreSQL RDBMS(PL/Python)中的Python如何在性能方面与Python之外的Python进行比较?
我在Ubuntu 12.04 64位上运行PostgreSQL 9.1和Python 2.7.
PostgreSQL PL/Python:
CREATE FUNCTION pymax7 (b integer)
RETURNS float
AS $$
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987)
return a
$$ LANGUAGE plpythonu;
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
import time
import sys
def pymax7 (b):
a = 0
for i in range(b):
for ii in range(b):
a = (((i+ii)%100)*149819874987) # keeping Python busy
return a
def main(): …Run Code Online (Sandbox Code Playgroud) plpython ×10
postgresql ×10
python ×7
clique ×1
install ×1
json ×1
macos ×1
python-2.7 ×1
travis-ci ×1
unicode ×1