pg_read_binary_file() 是一个用于读取本地文件系统上二进制文件内容的系统函数。
pg_read_binary_file() 添加于 PostgreSQL 9.1。
用法
pg_read_binary_file() 可用于返回本地文件系统中,postgres 系统用户有权访问的任何二进制文件的内容。内容以 bytea 类型返回。
请注意,如果出于将二进制文件存储在数据库中的目的而读取它们,则 大型对象 API 可能会更方便、更高效。
权限
默认情况下,pg_read_binary_file() 仅限于超级用户使用,但其他用户可以被授予 EXECUTE 权限来运行此函数。
源代码
pg_read_binary_file() 实现于 src/backend/utils/adt/genfile.c。
变更历史
- PostgreSQL 9.1
- 添加(提交 03db44ea)
示例
pg_read_binary_file() 的基本执行示例,这里将实例数据目录中的 PG_VERSION 文件作为 bytea 类型读取。
postgres=# SELECT pg_read_binary_file(current_setting('data_directory') || '/PG_VERSION');
pg_read_binary_file
---------------------
\x31340a
(1 row)
将文本文件转换为数据库的编码
postgres=# SELECT pg_read_file('/tmp/convert.txt'); ERROR: invalid byte sequence for encoding "UTF8": 0xfc $ cat /tmp/convert.txt �berbewertete �thiopische �dnis
$ file -i /tmp/convert.txt /tmp/convert.txt: text/plain; charset=iso-8859-1 postgres=# SELECT convert_from(pg_read_binary_file('/tmp/convert.txt'), 'ISO_8859_1'); convert_from --------------------------------- überbewertete äthiopische Ödnis+ (1 row)
尝试读取一个不存在的文件
postgres=# SELECT pg_read_binary_file('/foo/bar.bin');
ERROR: could not open file "/foo/bar.bin" for reading: No such file or directory
尝试读取一个权限不足的文件
postgres=# SELECT pg_read_binary_file('/root/bar.bin');
ERROR: could not open file "/root/bar.bin" for reading: Permission denied
参考资料
- PostgreSQL 文档: 通用文件访问函数
