作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试用 PL/Python 编写一个过程来执行一些数据的转换,然后将结果作为 bytea
返回。 (实际上,这非常丑陋:在 OCaml 中编码数据!同时在 Python 和 OCaml 中都很丑陋;我应该获得奖牌吗?)
这是它的样子:
CREATE OR REPLACE FUNCTION ml_marshal(data varchar) RETURNS bytea as $$
import tempfile, os
fn = tempfile.mktemp()
f = open(fn, 'w')
dest_fn = tempfile.mktemp()
f.write("let outch = open_out_bin \"" + dest_fn + "\" in " +
"Marshal.to_channel outch (" + data + ") [Marshal.No_sharing]; " +
"close_out outch")
f.close()
os.system("ocaml " + fn)
os.unlink(fn)
f = open(dest_fn, 'r')
res = f.read()
f.close()
os.unlink(dest_fn)
return res
$$ LANGUAGE plpythonu;
简而言之,它将一个小的 OCaml 程序写到一个临时文件中,该临时文件使用我们想要的数据创建另一个临时文件。然后我们读入该临时文件,销毁它们,并返回结果。
只是不太行:
meidi=# select * from tblmodel;
modelid | polies
---------+------------------
1 | \204\225\246\276
2 | \204\225\246\276
每个有四个字节(应该有~130)。如果我停止取消文件链接,原因就很明显了;有四个非 NUL 字节,后跟几个 NUL,看起来这些 NUL 在从 Python 到 Postgres 的转换的某个阶段被视为终止符!
有谁知道为什么会发生这种情况,或者如何阻止它?文档没有启发性。
谢谢!
编辑:我找到了 someone else with the same problem ,但解决方案并不令人满意。
最佳答案
这已在 9.0 版中修复。我有同样的问题,所以我升级了。来自release notes :
Improve bytea support in PL/Python (Caleb Welton)
Bytea values passed into PL/Python are now represented as binary, rather than the PostgreSQL bytea text format. Bytea values containing null bytes are now also output properly from PL/Python. Passing of boolean, integer, and float values was also improved.
我不认为在以前的 PostgreSQL 版本中有一个非常优雅的解决方案来解决这个问题。
关于postgresql - 如何在 PL/Python PostgreSQL 例程中返回二进制字符串 (bytea)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4801431/
我是一名优秀的程序员,十分优秀!