PostgreSQL_FDW
功能描述
postgres_fdw功能提供了外部数据包装器postgres_fdw插件,它可以被用来访问存储在外部Vastbase服务器中的数据。
语法格式
1、加载postgres_fdw扩展
CREATE EXTENSION [ IF NOT EXISTS ] extension_name
[ WITH ] [ SCHEMA schema_name ]
[ VERSION version ]
[ FROM old_version ]
2、创建一个新的外部服务器
CREATE SERVER server_name
FOREIGN DATA WRAPPER fdw_name
OPTIONS ( { option_name ' value ' } [, ...] ) ;
3、创建一个用户到一个外部服务器的新映射
CREATE USER MAPPING FOR { user_name | USER | CURRENT_USER | PUBLIC }
SERVER server_name
[ OPTIONS ( option 'value' [ , ... ] ) ]
4、创建外表
CREATE FOREIGN TABLE [ IF NOT EXISTS ] table_name ( [
column_name type_name [ OPTIONS ( option 'value' [, ... ] ) ] [ COLLATE collation ] [ column_constraint [ ... ] ]
[, ... ]
] )
SERVER server_name
[ OPTIONS ( option 'value' [, ... ] ) ]
这里column_constraint 可以是:
[ CONSTRAINT constraint_name ]
{ NOT NULL |
NULL |
DEFAULT default_expr }
参数说明
1、 server_name:server的名称。取值范围:长度必须小于等于63。
2、 fdw_name:指定外部数据封装器的名称。取值范围:oracle_fdw,mysql_fdw,postgres_fdw,mot_fdw。
3、 CREATE SERVER中OPTIONS参数包括:
host(必选):要连接的主机名,本功能填写远端服务器的IP地址。
port(必选):主机服务器的端口号,本功能填写远端服务器上集群的端口号。
dbname(必选):数据库名,本功能填写远端服务器上的数据库名。
hostaddr(非必选):与之链接的主机的IP地址,是标准的IPv4地址格式,比如,172.28.40.9。如果机器支持IPv6,那么也可以使用IPv6的地址。如果声明了一个非空的字符串,那么使用TCP/IP通讯机制。
connect_timeout(非必选):链接的最大等待时间,以秒计(用十进制整数字符串书写),0或者不声明表示无穷。不建议把链接超时的值设置得小于2秒。
options(非必选):添加命令行选项以在运行时发送到服务器。
keepalives(非必选):控制客户端侧的TCP保持激活是否使用。缺省值是1,意思为打开,但是如果不想要保持激活,你可以更改为0,意思为关闭。通过Unix域套接字做的链接忽略这个参数。
keepalives_idle(非必选):在TCP应该发送一个保持激活的信息给服务器之后,控制不活动的秒数。0值表示使用系统缺省。通过Unix域套接字做的链接或者如果禁用了保持激活则忽略这个参数。
keepalives_interval(非必选):在TCP保持激活信息没有被应该传播的服务器承认之后,控制秒数。0值表示使用系统缺省。通过Unix域套接字做的链接或者如果禁用了保持激活则忽略这个参数。
keepalives_count(非必选):添加命令行选项以在运行时发送到服务器。例如,设置为-c comm_debug_mode=off设置guc参数comm_debug_mode参数的会话的值为off。
use_remote_estimate(非必选):控制postgres_fdw是否发出EXPLAIN命令以获取运行消耗估算。默认值为false。
fdw_startup_cost(非必选):执行一个外表扫描时的启动耗时估算。这个值通常包含建立连接、远端对请求的分析和生成计划的耗时。默认值为100。
fdw_typle_cost(非必选):在远端服务器上对每一个元组进行扫描时的额外消耗。这个值通常表示数据在server间传输的额外消耗。默认值为0.01。
4、 user_name:要映射到外部服务器的一个现有用户的名称。 CURRENT_USER和USER匹配当前用户的名称。 当PUBLIC被指定时,一个所谓的公共映射会被创建,当没有特定用户的映射可用时将会使用它。
5、 server_name:将为其创建用户映射的现有服务器的名称。
6、 CREATE USER MAPPING中OPTIONS参数包括:
user(必选):远端服务器上Vastbase的用户名,属于普通用户。
password(必选):远端服务器上Vastbase用户对应的密码
7、 table_name:外表的表名。取值范围:字符串,要符合标识符的命名规范。
8、 column_name:外表中的字段名。取值范围:字符串,要符合标识符的命名规范。
9、 type_name:字段的数据类型。
10、 SERVER server_name:外表的server名称。
11、 OPTIONS 参数包括:
schema_name(必选):远端server的schema名称。如果不指定的话,将使用外表自身的schema名称作为远端的schema名称。
table_name(必选):远端server的表名。如果不指定的话,将使用外表自身的表名作为远端的表名。
column_name(非必选):远端server的表的列名。如果不指定的话,将使用外表自身的列名作为远端的的表的列名。
示例
1、在本地服务器中,使用新建的用户登录系统
2、加载postgres_fdw扩展:
create extension postgres_fdw ;
3、创建外部服务器:
create server server_to_200 foreign data wrapper postgres_fdw options (host '172.16.103.82',port '64322',dbname 'postgres');
4、创建一个用户到外部服务器的映射:
create user MAPPING FOR hzy SERVER server_to_200 OPTIONS (user 'hzy',password '123456Aa');
5、创建外表:
create foreign table local_foreign_table_student( student_no int4 , student_name varchar(30), age int2) server server_to_200 options(schema_name 'hzy', table_name 'student');
6、访问外表
select * from local_foreign_table_student;
insert into local_foreign_table_student values (2,'xiaohong',11);
update local_foreign_table_student set student_name = 'xiaoqing' where student_no = 1;
delete from local_foreign_table_student where age = 11;
explain select * from local_foreign_table_student ;
7、查看外表结构
\d+ local_foreign_table_student;
\d+ local_foreign_table_student;