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()" 的任何评论、建议或更正 此处