pg_read_file()

读取文本文件内容的函数

pg_read_file() 是一个用于读取本地文件系统上文本文件内容的系统函数。

pg_read_file()PostgreSQL 8.1 中添加。

用法

PostgreSQL 15 及更早版本中

pg_read_file ( filename text [, offset bigint, length bigint [, missing_ok boolean ]] ) 
        → text

PostgreSQL 16 及更高版本中

pg_read_file ( filename text [, offset bigint, length bigint ][, missing_ok boolean ] ) 
        → text

pg_read_file() 可用于返回本地文件系统上 postgres 系统用户有权访问的任何文本文件的内容。

请注意,对于将结构化数据文件读取到表中,COPY 命令和 file_fdw 外部数据包装器将提供更方便和高效的接口。

权限

默认情况下,pg_read_file() 仅限超级用户使用,但可以授予其他用户执行此函数的 EXECUTE 权限。

源代码

pg_read_file()src/backend/utils/adt/genfile.c 中实现。

更改历史

示例

读取 PostgreSQL 实例的 postmaster.pid 文件

postgres=# SELECT pg_read_file(current_setting('data_directory') || '/postmaster.pid');
    pg_read_file     
---------------------
 3568221            +
 /var/lib/pgsql/data+
 1608776039         +
 5432               +
 /tmp               +
 *                  +
 113475654  37224658+
 ready              +
 
(1 row)

尝试读取不存在的文件

postgres=# SELECT pg_read_file('/foo/bar.txt');
ERROR:  could not open file "/foo/bar.txt" for reading: No such file or directory

尝试读取权限不可用的文件

postgres=# SELECT pg_read_file('/root/password.txt');
ERROR:  could not open file "/root/password.txt" for reading: Permission denied

尝试读取二进制文件可能会导致某种编码错误

postgres=# SELECT pg_read_file(current_setting('data_directory') || '/global/pg_control');
ERROR:  invalid byte sequence for encoding "UTF8": 0xb9

请参阅 pg_read_binary_file()

分类

文件访问和操作系统函数

另请参阅

pg_read_binary_file()pg_stat_file()

反馈

提交任何关于 "pg_read_file()" 的评论、建议或更正 此处