Centos7下PostgreSQL file_fdw与postgres_fdw的使用
1、file_fdw的使用
1.1、file_fdw的介绍
file_fdw
模块提供外部数据包装器file_fdw
,可用于访问服务器文件系统中的数据文件,或执行服务器上的程序并读取其输出。数据文件或程序输出必须采用可以读取的格式COPY FROM
;目前,对数据文件的访问权限是只读的。
使用此包装器创建的外表可以具有以下选项:
filename
指定要读取的文件。必须是绝对路径名。无论是filename
或 program
必须指定,但不能两者兼得。
program
指定要执行的命令。将读取此命令的标准输出,就像COPY FROM PROGRAM
使用它一样。无论是 program
或filename
必须指定,但不能两者兼得。
format
指定数据格式,同样COPY
的FORMAT
选项。
header
指定数据是否具有标题行,相同COPY
的HEADER
选项。
delimiter
指定数据分隔符,与COPY
's DELIMITER
选项相同 。
quote
指定数据引号字符,相同 COPY
的QUOTE
选项。
escape
指定数据转义字符,相同 COPY
的ESCAPE
选项。
null
指定数据空字符串,一样COPY
的NULL
选择。
encoding
指定数据编码,一样COPY
的ENCODING
选择。
请注意,虽然COPY
允许HEADER
指定诸如没有相应值的选项,但外表选项语法要求在所有情况下都存在一个值。要** COPY
通常没有值的选项,您可以传递值TRUE,因为所有这些选项都是布尔值。
1.2、添加file_fdw扩展。
postgres=# create extension file_fdw ;
出现上述错误,先进入文件路径/usr/pgsql-10/share/extension/, 发现下面的确没有file_fdw.control这个文件,于是怀疑是否有些相关的包文件未安装齐全,那么采取暴力一点的办法,把所有有关postgresql10的安装包全部装上,
[[email protected] extension]# yum install postgresql10*
安装完后,查看:
再次执行,成功
postgres=# create extension file_fdw ;
postgres=# \dx --查看所有的外部扩展
1.3、测试file_fdw
请参考:https://blog.****.net/luojinbai/article/details/45673113
2、postgres_fdw的使用
以下是使用创建外表的示例 postgres_fdw
。首先安装扩展:
CREATE EXTENSION postgres_fdw;
然后使用CREATE SERVER创建外部服务器。在这个例子中,我们希望在主机侦听端口上连接到PostgreSQL服务器。建立连接的数据库在远程服务器上命名:192.83.123.89
5432
foreign_db
CREATE SERVER foreign_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host '192.83.123.89', port '5432', dbname 'foreign_db');
还需要使用CREATE USER MAPPING定义的用户映射,以标识将在远程服务器上使用的角色,options里是远程服务器上用户名和密码。:
CREATE USER MAPPING FOR local_user
SERVER foreign_server
OPTIONS (user 'foreign_user', password 'password');
现在可以使用CREATE FOREIGN TABLE创建外部表。在此示例中,我们希望访问some_schema.some_table
远程服务器上指定的表。它的本地名称是foreign_table
:
CREATE FOREIGN TABLE foreign_table (
id integer NOT NULL,
data text
)
SERVER foreign_server
OPTIONS (schema_name 'some_schema', table_name 'some_table');
声明的列的数据类型和其他属性CREATE FOREIGN TABLE
与实际的远程表匹配是至关重要的。列名也必须匹配,除非您将column_name
选项附加到各列以显示它们在远程表中的命名方式。在许多情况下,使用IMPORT FOREIGN SCHEMA比手动构建外部表定义更可取。
参考:https://www.postgresql.org/docs/current/postgres-fdw.html
2.1、postgres_fdw的测试
请参考:https://blog.****.net/liyuhui195134/article/details/78972741