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