pg_read_binary_file()

读取本地文件系统上二进制文件内容的系统函数

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

变更历史

示例

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

分类

文件访问和操作, 系统函数

另请参阅

pg_read_file(), pg_stat_file()

反馈

就“pg_read_binary_file()”提交任何评论、建议或更正,请点击 此处