通用文件访问函数

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

  • pg_ls_dir(dirname text)

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

返回值类型:setof text

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

示例:

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

描述:返回一个文本文件的内容。

返回值类型:text

备注:pg_read_file返回一个文本文件的一部分,从offset开始,最多返回length字节(如果先达到文件结尾,则小于这个数值)。如果offset是负数,则它是相对于文件结尾回退的长度。如果省略了offset和length,则返回整个文件。

示例:

1. openGauss=# SELECT pg_read_file('postmaster.pid',0,100); 2. pg_read_file 3. --------------------------------------- 4. 53078 + 5. /srv/BigData/hadoop/data1/dbnode+ 6. 1500022474 + 7. 8000 + 8. /var/run/FusionInsight + 9. localhost + 10. 2 11. (1 row) - pg_read_binary_file(filename text [, offset bigint, length bigint,missing_ok boolean])

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

返回值类型:bytea

备注:pg_read_binary_file的功能与pg_read_file类似,除了结果的返回值为bytea类型不一致,相应地不会执行编码检查。与convert_from函数结合,这个函数可以用来读取用指定编码的一个文件。

1. openGauss=# SELECT convert_from(pg_read_binary_file('filename'), 'UTF8'); - pg_stat_file(filename text)

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

返回值类型:record

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

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

1. openGauss=# SELECT (pg_stat_file('filename')).modification;

示例:

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

  1. (1 row) ```

``` 1. openGauss=# SELECT * FROM pg_stat_file('postmaster.pid');

  1. size | access | modification | change
  2. | creation | isdir
  3. ------+------------------------+------------------------+------------------------
  4. +----------+-------
  5. 117 | 2017-06-05 11:06:34+08 | 2017-06-01 17:18:08+08 | 2017-06-01 17:18:08+08
  6. | | f
  7. (1 row) ```

1. openGauss=# SELECT (pg_stat_file('postmaster.pid')).modification; 2. modification 3. ------------------------ 4. 2017-06-01 17:18:08+08 5. (1 row)