file_fdw
是一个 contrib模块,提供了一个 外部数据包装器 (FDW),它允许将服务器本地文件系统上的文件作为表进行查询。file_fdw
是只读的。
file_fdw
在 PostgreSQL 9.1 中添加。
安装
必须由超级用户使用 CREATE EXTENSION
语法将 file_fdw
扩展安装到需要其功能的数据库中。
用法
文件格式
输入文件必须采用 COPY ... FROM
命令支持的格式之一
文本
csv
二进制
权限
在 PostgreSQL 11 之前,只有超级用户才能使用 file_fdw
从操作系统读取文件。从 PostgreSQL 11 开始,以下 预定义角色 可用于启用非超级用户使用 file_fdw
pg_read_server_files
pg_write_server_files
pg_execute_server_program
更改历史记录
- PostgreSQL 18
- 添加了
on_error
和log_verbosity
选项(提交 a1c4c8a9)
- 添加了
- PostgreSQL 10
file_fdw
可以读取程序的输出以及文件中的输出(提交 8e91e12b)
- PostgreSQL 9.4
- 添加了
force_null
选项(提交 3b5e03dc)
- 添加了
- PostgreSQL 9.2
- 添加了
force_not_null
选项(提交 86a3f2d4)
- 添加了
- PostgreSQL 9.1
- 添加(提交 7c5d0ae7)
示例
作为一个人为的示例,将以下示例 CSV 文件保存为/tmp/file_fdw-test.csv:
ID,Message,Random numbers 1,Hello world,34432532 2,Goodbye cruel world,97325644
要查询此文件,请设置一个与先前创建的外部服务器关联的 外部表,该表包含定义为与 CSV 文件中的列匹配的列。外部表定义还包含文件的位置(数据库的系统用户必须能够读取该文件)。请注意,外部表定义必须作为超级用户执行,因为源文件将以数据库系统用户的权限读取,这存在潜在的安全风险。
适合读取示例文件的外部表为
CREATE EXTENSION file_fdw; CREATE SERVER file_fdw_test_srv FOREIGN DATA WRAPPER file_fdw; CREATE FOREIGN TABLE csv_test ( id INT, message TEXT, randnrs BIGINT ) SERVER file_fdw_test_srv OPTIONS ( filename '/tmp/file_fdw-test.csv', format 'csv', header 'TRUE' )
然后可以像查询普通表一样查询该文件
postgres=# SELECT * FROM csv_test; id | message | randnrs ----+---------------------+---------- 1 | Hello world | 34432532 2 | Goodbye cruel world | 97325644 (2 rows)