云数据库 RDS-使用dblink插件:基本使用

时间:2024-12-20 17:08:36

基本使用

场景一:

在一个实例里,存在多个数据库,不同数据库承载不同的业务,有些操作需要在多个数据库中执行,此时就可以使用dblink进行跨库操作。

-- 1、创建数据库
create database homedb;
create database db1;

-- 2、切换到homedb,创建dblink连接
select dblink_connect('connect_db1', 'dbname=db1 port=5432 user=root password=******** host=127.0.0.1');
dblink_connect
----------------
OK
(1 row)

--3、执行sql命令
--执行查询
SELECT * FROM dblink('connect_db1', 'select * from test') as test(id integer, info varchar(8));
id | info
----+------
1 | a
2 | b
(2 rows)

--执行插入
SELECT dblink_exec('connect_db1', 'insert into test values(3,'c')');
dblink_exec
-------------
INSERT 0 1
(1 row)

-- 3、切换到db1查看结果
select * from test;
id | info
----+------
1 | a
2 | b
3 | c
(3 rows)

-- 4、关闭远程连接
SELECT dblink_disconnect('connect_db1');
dblink_disconnect
----------------
OK
(1 row)

场景二:

同一VPC下有两个RDS for PostgreSQL数据库实例:生产环境(数据库db1)、测试环境(数据库db2)。需要将测试环境的数据同步至生产环境,此时在生产环境中可通过dblink插件实现数据同步。

-- 1、登录生产环境,创建数据库
create database db1;

-- 2、切换到生产库db1,连接测试环境库db2
select dblink_connect('connect_db2', 'dbname=db2 port=5432 user=root password=******** host=10.29.182.247');
dblink_connect
----------------
OK
(1 row)

-- 3、查询测试库db2中test1表的值
SELECT * FROM dblink('host=10.29.182.247 port=5432 user=root password=******** dbname=db2', 'select * from test1') as test1(id int, name text);
id | name
----+------
1 | a
2 | b
(2 rows)

-- 4、将测试库db2中的test1表同步到生产库db1中的backup1表
insert into backup1 SELECT * FROM dblink('dbname=db2 port=5432 user=root password=******** host=10.29.182.247', 'select * from test1') as backup1(id int, name text);
dblink
-------------
INSERT 0 2
(2 row)

--5、查询生产库db1库backup1表
select * from backup1;
id | name
----+------
1 | a
2 | b
(2 rows)

--6、关闭连接
SELECT dblink_disconnect('connect_db2');
dblink_disconnect
----------------
OK
(1 row)
support.huaweicloud.com/usermanual-rds/rds_09_0072.html