概述
dblink 是Postgresql的一个模块,支持从数据库会话中连接到其他数据库。
安装 dblink
alert user postgres with superuser; \c template1
复制
CREATE EXTENSION dblink;
select * from pg_available_extensions;
复制
\c postgres *abc为当前表
复制
CREATE EXTENSION dblink;
复制
登录数据库,在Postgres=#下
CREATE EXTENSION dblink;
复制
本地跨库访问
首先在 Postgresql中建立 userinfo 表,随后在本地新建一个 localdb 数据库,并在其中建立一个 local_test 数据表。
*建表
CREATE TABLE userinfo (id int primary key, name text);
*插值
INSERT INTO userinfo VALUES (1, 'Eric'), (2, 'Tom');
*查询一下
SELECT * FROM userinfo;
*建localdb库
CREATE DATABASE localdb;
*连接库
\c localdb
*建表
CREATE TABLE local_test (id serial primary key, ival int default 0, create_time timestamptz not null default now());
*插值
INSERT INTO local_test(ival) VALUES (1), (2), (3), (4);
*查询一下
SELECT * FROM local_test;
复制
4条记录,OK,我们继续
在 Postgresql数据库中查询 local_test 表,就需要使用到 dblink 来访问了。首先,我们通过 dblink_connect 创建一个连接。
SELECT dblink_connect('local_dblink_test','dbname=localdb hostaddr=127.0.0.1 port=5432 user=postgres password=mypassword');
复制
再通过 dblink 执行查询。
SELECT * FROM dblink('local_dblink_test', 'SELECT * FROM local_test;') AS lt(id int, ival int, create_time timestamptz);
复制
再把返回结果与本库中的表进行联合查询。
SELECT u.id, name, create_time FROM userinfo u JOIN dblink('local_dblink_test', 'SELECT * FROM local_test;') AS lt(id int, ival int, create_time timestamptz) on u.id = lt.id;
复制
可以为dblink创建一个视图。
CREATE VIEW v_localdb_test AS SELECT * FROM dblink('local_dblink_test', 'SELECT * FROM local_test;') AS lt(id int, ival int, create_time timestamptz);
SELECT * FROM v_localdb_test;
SELECT u.id, name, create_time FROM userinfo u JOIN v_localdb_test v ON u.id = v.id;
复制
备注: 在 local_test 表中 id 字段类型为 serial,但是在通过 dblink 查询时返回的结果类型不能使用 serial 类型。
远端跨库访问
远端跨库访问本质也是类似的,在配置 dblink_connect 连接参数时指明远端数据库的地址、端口、用户名和密码等信息。如:
SELECT dblink_connect('remote_dblink_test', 'dbname=remotedb hostaddr=192.168.10.24 port=5432 user=postgres password=mypassword');
复制
操作参考上面的<本地跨库访问>
关闭 dblink
当不需要在使用 dblink 访问外部数据库时,我们需要使用 dblink_disconnect 来关闭连接。首先,我们通过 dblink_get_connections 来查看现有的 dblink 连接,随后将其关闭。
SELECT dblink_get_connections();
SELECT dblink_disconnect('remote_dblink_test');
SELECT dblink_disconnect('local_dblink_test');
复制
最后修改时间:2023-08-17 19:15:03
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
604次阅读
2025-04-21 16:58:09
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
359次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
344次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
316次阅读
2025-04-07 12:14:29
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
154次阅读
2025-04-14 15:58:34
墨天轮PostgreSQL认证证书快递已发(2025年3月批)
墨天轮小教习
134次阅读
2025-04-03 11:43:25
SQL 优化之 OR 子句改写
xiongcc
100次阅读
2025-04-21 00:08:06
融合Redis缓存的PostgreSQL高可用架构
梧桐
91次阅读
2025-04-08 06:35:40
PostgreSQL拓展PGQ实现解析
chirpyli
89次阅读
2025-04-07 11:23:17
Mysql/Oracle/Postgresql快速批量生成百万级测试数据sql
hongg
78次阅读
2025-04-07 15:32:54