跨库操作dblink和postgres_fdw

举报
大象数据库 发表于 2021/04/08 21:28:32 2021/04/08
9.9k+ 0 0
【摘要】 跨库操作dblink和postgres_fdw插件介绍:使用dblink和postgres_fdw可以实现跨库操作其他PostgreSQL库。 系统要求PostgreSQL 9.5+与要连接的其他PostgreSQL网络连通 dblink1、新建dblink插件。CREATE EXTENSION dblink;2、连接远程数据库--SELECT dblink_connect('<connn...

跨库操作dblink和postgres_fdw

插件介绍:
使用dblink和postgres_fdw可以实现跨库操作其他PostgreSQL库。

系统要求

PostgreSQL 9.5+
与要连接的其他PostgreSQL网络连通

dblink

1、新建dblink插件。

CREATE EXTENSION dblink;

2、连接远程数据库

--SELECT dblink_connect('<connname>', '<connstr>');
SELECT dblink_connect('mydb', 'dbname=postgres port=5432 host=localhost');
 dblink_connect 
----------------
 OK
(1 row)

该函数有两个参数:connname和connstr,其中connname是可选参数。
connname:要用于这个连接的名字。如果被忽略,将打开一个未命名连接并且替换掉任何现有的未命名连接。
connstr:数据库连接串信息,格式为:hostaddr=<IP或域名> port=<端口号> dbname=<数据库名> user=<用户名> password=<密码>
3、执行sql命令

--执行查询
SELECT * FROM dblink('mydb', 'select * from test') as test(id integer, info varchar(8));
 id | info 
----+------
 1 | a
 1 | b
(2 rows)
--执行插入
SELECT dblink_exec('mydb', 'insert into test values (3,''c'');');
 dblink_exec 
-------------
 INSERT 0 1
(1 row)
SELECT * FROM dblink('mydb', 'select * from test') as test(id integer, info varchar(8));
 id | info 
----+------
 1 | a
 2 | b
 3 | c
(3 rows)

4、查询连接状态

SELECT dblink_get_connections();
 dblink_get_connections 
------------------------
 {mydb}
(1 row)

5、关闭远程连接

SELECT dblink_disconnect('mydb');

更多内容请参考dblink

postgres_fdw

1、新建postgres_fdw插件

CREATE EXTENSION postgres_fdw;

2、然后使用CREATE SERVER创建一个外部服务器

CREATE SERVER foreign_server
 FOREIGN DATA WRAPPER postgres_fdw
 OPTIONS (host 'x.x.x.x', port '5432', dbname 'foreign_db');

3、使用CREATE USER MAPPING一个用户映射,每一个用户映射都代表你想允许一个数据库用户访问一个外部服务器。

--指定要映射到外部服务器的本地数据库用户名local_user
CREATE USER MAPPING FOR local_user
 SERVER foreign_server
 OPTIONS (user 'foreign_user', password 'password');

4、为每一个你想访问的远程表使用CREATE FOREIGN TABLE或者IMPORT FOREIGN SCHEMA创建一个外部表

CREATE FOREIGN TABLE foreign_table (
 id integer,
info varchar(8)
)
 SERVER foreign_server
 OPTIONS (schema_name 'some_schema', table_name 'some_table');

5、查询

SELECT * FROM foreign_table;
 id | info 
----+------
 1 | a
 2 | b
 3 | c
(3 rows)

更多内容请参考postgres_fdw

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。