pg_ls_dir()

用于检查目录内容的函数

pg_ls_dir() 是一个用于检查本地文件系统中目录内容的系统函数。

pg_ls_dir() 添加于 PostgreSQL 8.1

用法

pg_ls_dir ( dirname text [, missing_ok boolean, include_dot_dirs boolean ] )
    → setof text

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

它返回的文件系统对象是未排序的,因此通常与 ORDER BY 结合使用。

PostgreSQL 9.5 起,pg_ls_dir() 可选地返回特殊目录 "." 和 "..",并且可选地在指定目录未找到时不返回错误。

权限

默认情况下,pg_ls_dir() 仅限于超级用户,但可以授予其他用户 EXECUTE 权限来运行此函数。

请注意,与其他 pg_ls_...() 函数不同,pg_ls_dir() 可用于访问文件系统中的任何目录,而不仅仅是 PostgreSQL 使用的目录,因此默认情况下不提供给 pg_monitor 默认角色 的成员使用。

源代码

pg_ls_dir() 实现于 src/backend/utils/adt/genfile.c

变更历史

示例

pg_ls_dir() 的基本执行

postgres=# SELECT pg_ls_dir('/') ORDER BY 1 LIMIT 5;
  pg_ls_dir   
--------------
 bin
 boot
 dev
 etc
 home
(5 rows)

包含特殊“点”目录

postgres=# SELECT pg_ls_dir(current_setting('data_directory') || '/pg_stat_tmp', FALSE, TRUE) ORDER BY 1;
       pg_ls_dir       
-----------------------
 .
 ..
 db_0.stat
 db_13832.stat
 db_16385.stat
 global.stat
 pgss_query_texts.stat
(7 rows)

尝试读取可能不存在的目录

postgres=# SELECT pg_ls_dir('/foo');
ERROR:  could not open directory "/foo": No such file or directory

安全地尝试读取可能不存在的目录

postgres=# SELECT pg_ls_dir('/foo', TRUE, FALSE);
 pg_ls_dir 
-----------
(0 rows)

请注意,尝试读取 postgres 系统用户无法访问的目录始终会导致错误。

postgres=# SELECT pg_ls_dir('/root');
ERROR:  could not open directory "/root": Permission denied

postgres=# SELECT pg_ls_dir('/root', TRUE, FALSE);
ERROR:  could not open directory "/root": Permission denied

分类

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

另请参阅

pg_ls_logdir(), pg_ls_tmpdir(), pg_ls_waldir(), pg_ls_archive_statusdir()

反馈

提交任何关于“pg_ls_dir()”的评论、建议或更正请在此处 提交