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