postgresql - 在没有 pg_read_file 的情况下使用 PostgreSQL 读取二进制文件
问题描述
我需要一个清晰的 PostgreSQL 9.4 来解决以下问题:
- 将压缩文件从服务器读取到 bytea 列
- 不允许扩展
- 允许超级用户
- Postgres 用户有权读取文件
- 可以是用户函数
编辑:
该文件位于集群路径之外,因此正常功能会引发:
SQL 错误:错误:不允许绝对路径
解决方案
这是该工作的一个简单功能get_file_contents(filename text) returns bytea
。
create or replace function get_file_contents(filename text) returns bytea as
$fn$
declare
lo_oid oid;
retval bytea;
begin
lo_oid := lo_import(filename);
retval := lo_get(lo_oid);
perform lo_unlink(lo_oid);
return retval;
end;
$fn$ language plpgsql;
- 琐碎的用法
-- Read the great work of Sun Tzu
select get_file_contents('/media/data/ForeignData/The Art Of War.pdf');
-- Insert into a table, update a table
insert into mytable (mycolumn[,<others>]) values (get_file_contents(myfilename)[,<others>]);
update mytable set mycolumn = get_file_contents(myfilename) where <whatever there>;
推荐阅读
- qt - 'QScrollBar:vertical' 与 QComboBox 样式表中的其他子控件放在一起时无效
- .net - 我想在每个节点中创建一个包含 N 个字段的列表
- excel - 根据单元格引用从工作表中检索信息?
- go - 我想从 Goproxy 中删除我的私人包
- salesforce - 通过工具 api 访问 CustomFieldDefinition 元数据
- c++ - 使用布尔变量理解按位异或 (^)
- erlang - Erlang gen_tcp 连接仅适用于同一网络
- javascript - 如何递归地取消嵌套深度嵌套的对象?
- python - 您如何使用机器人删除不和谐频道。PYTHON
- python - 在 Python 的同一个类中调用另一个方法中的方法