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 文档: 通用文件访问函数