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 权限来运行此函数。

Source

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()”的任何评论、建议或更正 这里