更新时间:2026-02-06 GMT+08:00
分享

通用文件访问函数

通用文件访问函数提供了对数据库服务器上的文件的本地访问接口。只有数据库集群目录和log_directory目录中的文件可以访问。使用相对路径访问集群目录中的文件,以及匹配log_directory配置而设置的路径访问日志文件。只有数据库初始化用户才能使用这些函数。

pg_ls_dir(dirname text)

描述:列出目录中的文件。

返回值类型:setof text

备注:pg_ls_dir返回指定目录中排除特殊项“.”和“..”之外的所有名称。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
gaussdb=# SELECT pg_ls_dir('./');
      pg_ls_dir       
----------------------
 .gaussdb.conf.swp
 gaussdb.conf
 pg_tblspc
 PG_VERSION
 gs_ident.conf
 core
 server.crt
 pg_serial
 pg_twophase
 gaussdb.conf.lock
 pg_stat_tmp
 pg_notify
 pg_subtrans
 pg_ctl.lock
 pg_xlog
 pg_clog
 base
 pg_snapshots
 postmaster.opts
 postmaster.pid
 server.key.rand
 server.key.cipher
 pg_multixact
 pg_errorinfo
 server.key
 gs_hba.conf
 pg_replslot
 .gs_hba.conf.swp
 cacert.pem
 gs_hba.conf.lock
 global
 gaussdb.state
(32 rows)

pg_read_file(filename text, offset bigint, length bigint)

描述:该函数返回文本文件的指定部分内容,从offset开始,最多返回length字节的内容(如果先达到文件结尾,则返回的字节数小于指定的length值)。

  • 如果offset为负数,则表示从文件结尾回退offset个字节的位置,读取length长度的文本内容。
  • 如果省略了offset和length参数,则返回整个文件的内容。

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
gaussdb=# SELECT pg_read_file('postmaster.pid',0,100);
             pg_read_file              
---------------------------------------
 53078                                +
 /srv/BigData/testdir/data1/coordinator+
 1500022474                           +
 8000                                +
 /var/run/FusionInsight               +
 localhost                            +
  2
(1 row)

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

描述:返回一个二进制文件的内容。

返回值类型:bytea

备注:该函数的功能与pg_read_file函数类似,但其返回值为bytea类型,因此不会执行编码检查。可以结合convert_from函数,读取指定编码的一个文件。

1
gaussdb=# SELECT convert_from(pg_read_binary_file('filename'), 'UTF8');

pg_stat_file(filename text)

描述:返回一个文本文件的状态信息。

返回值类型:record

备注:该函数返回一条记录,其中包含:文件大小、最后访问时间戳、最后更改时间戳、最后文件状态修改时间戳以及标识传入参数是否为目录的Boolean值。典型的用法:

1
gaussdb=# SELECT * FROM pg_stat_file('filename');
1
gaussdb=# SELECT (pg_stat_file('filename')).modification;

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
gaussdb=# SELECT convert_from(pg_read_binary_file('postmaster.pid'), 'UTF8');
             convert_from             
--------------------------------------
 4881                                +
 /srv/BigData/gaussdb/data1/coordinator+
 1496308688                          +
 25108                               +
 /opt/huawei/Bigdata/gaussdb/gaussdb_tmp +
 *                                   +
  25108001  43352069                 +

(1 row)
1
2
3
4
5
6
7
8
9
gaussdb=# SELECT * FROM pg_stat_file('postmaster.pid');
 
 size |         access         |      modification      |         change         
| creation | isdir 
------+------------------------+------------------------+------------------------
+----------+-------
  117 | 2017-06-05 11:06:34+08 | 2017-06-01 17:18:08+08 | 2017-06-01 17:18:08+08 
|          | f
(1 row)
1
2
3
4
5
gaussdb=# SELECT (pg_stat_file('postmaster.pid')).modification;
      modification      
------------------------
 2017-06-01 17:18:08+08
(1 row)

相关文档