RDS PostgreSQL如何通过postgres_fdw和dblink插件实现跨库查询
安装postgres_fdw插件 登录RDS PostgreSQL实例,执行如下SQL语句,安装postgres_fdw插件。 create extension postgres_fdw; 执行如下SQL语句,查询RDS PostgreSQL实例的所有拓展插件,确认成功安装postgres_fdw插件。 select * from pg_available_extensions;
创建远程Server服务器 执行如下SQL语句,创建远程Server服务器。 create server [$Server_Name] FOREIGN data wrapper postgres_fdw OPTIONS(host '[$Host_Name]', port '[$Port]', dbname '[$DB]'); 注: [$Server_Name]为远程Server服务器名称。 [$Host_Name]为另一个实例的内网域名。 [$Port]为另一个实例的内网监听端口。 [$DB]为另一个实例需要远程的库名。 执行如下SQL语句,确认创建成功。 SELECT * from pg_foreign_server;
创建用户匹配信息 执行如下SQL语句,给远程Server服务器创建一个用户。
create user mapping for [$Local_User] server [$Server_Name] options(user '[$User]',password '[Password]'); 注:
[$Local_User]为当前登录的用户名。 [$User]为远程实例的用户名。 [Password]为远程实例的密码。
创建外部表 参考如下SQL语句,创建外部表,该表要与远程实例中的表名和表结构要相同,其中外部表的字段可以少于远程表,但是字段名要完全一致。
CREATE FOREIGN TABLE [$Table_Name](id int,remark text) server [$Server_Name] options (table_name '[$Table_Name]'); 注:[$Table_Name]为需要进行跨库查询的表名。
跨库查询 执行如下SQL语句,进行跨库查询。
select * from [$Table_Name];
dblink插件实现跨库查询 提示:当在ECS实例上自建Postgres数据库时,dblink插件不支持不同实例间的跨库查询。
登录RDS PostgreSQL实例,执行如下SQL语句,创建dblink插件。 create extension dblink; 执行如下SQL语句,创建到远程库的连接。 select dblink_connect('[$Server_Name]','host=[$Host_Name] port=[$Port] dbname=[$DB] user=[$User] password=[$Password]'); 注:如果使用DBlink访问相同实例的不同库,则不需要添加host和port选项。 参考如下SQL语句,进行跨库查询。 select * from dblink ('[$Server_Name]','select * from [$Table_Name]') as $Table_Name; 注:[$Type]为表的字段值和类型格式,如下所示。 id int, name varchar(20)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。