file_fdw
是一个 contrib 模块,它提供了一个 外部数据封装器 (FDW),该封装器允许将服务器本地文件系统上的文件作为表进行查询。 file_fdw
是只读的。
file_fdw
于 PostgreSQL 9.1 中添加。
安装
file_fdw
扩展必须由超级用户使用 CREATE EXTENSION
语法安装到需要其功能的数据库中。
用法
文件格式
输入文件必须是 COPY ... FROM
命令支持的格式之一
text
csv
binary
权限
在 PostgreSQL 11 之前,只有超级用户可以使用 file_fdw
从操作系统读取文件。从 PostgreSQL 11 开始,以下 预定义角色 可用于使非超级用户能够使用 file_fdw
pg_read_server_files
pg_write_server_files
pg_execute_server_program
变更历史
- PostgreSQL 18
- PostgreSQL 10
file_fdw
可以读取程序的输出以及文件的输出 (commit 8e91e12b)
- PostgreSQL 9.4
- 添加了
force_null
选项 (commit 3b5e03dc)
- 添加了
- PostgreSQL 9.2
- 添加了
force_not_null
选项 (commit 86a3f2d4)
- 添加了
- PostgreSQL 9.1
- 添加 (commit 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)
参考资料
- PostgreSQL documentation: file_fdw
- PostgreSQL documentation: COPY command