赞
踩
参考:https://www.cnblogs.com/lottu/p/13331387.html
目录
dblink是一个支持从数据库会话中连接到其他Kingbase数据库的插件。在其他数据库跨库操作也是采用dblink的方式。
create extension dblink ;
select dblink_connect('base_dblink','hostaddr=127.0.0.1 port=54321 dbname=base user=base password=base');
select dblink_get_connections()
SELECT dblink_disconnect('base_dblink');
使用dblink;我们更多是跨库查询操作;由于上面创建dblink_connect连接;所以我们可以拿来使用。
- SELECT * FROM dblink('base_dblink', 'select id, info from public.t1') as base_t1(id int, info text);
- id | info
- ------+-------
- 1001 | xxx
- (1 row)
我们也可以直接使用;无需先创建dblink_connect。这是常用的方式。
- SELECT * FROM dblink('host=192.168.1.2 port=6000 user=base password=base dbname=base', 'select id, info from public.t1') as base_t1(id int, info text);
- id | info
- ------+-------
- 1001 | xxx
- (1 row)
若我们跨库操作create、insert、update、delete语句;其实这种行为一般不跨库操作。慎用!下面演示下insert操作。
- SELECT dblink_exec('base_dblink', 'insert into public.t1 values (1002,''hello'')');
- dblink_exec
- -------------
- INSERT 0 1
- (1 row)
- # OR
- SELECT dblink('base_dblink', format('insert into public.t1 select %L, %L', 1003, 'lottu'));
- dblink
- ----------------
- ("INSERT 0 1")
- (1 row)
- CREATE OR REPLACE TRIGGER TR_USER_DEPARTMENT_DATA
- after insert or update or delete
- ON sfs_user_department
- FOR EACH ROW
- BEGIN
- IF TG_OP = 'INSERT' THEN
- dblink_exec('base_dblink', format('INSERT INTO sfs_user(USERID,USERNAME)
- VALUES(%L, %L);,
- :new.USERID, :new.USERNAME
- ));
- ELSIF TG_OP = 'UPDATE' THEN
- dblink_exec('base_dblink', format('UPDATE sfs_user set USERID=%L,USERNAME=%L
- WHERE USERID=%L;',:new.USERID, :new.USERNAME, :old.USERID
- ));
- ELSIF TG_OP = 'DELETE' THEN
- dblink_exec('base_dblink', format('DELETE FROM sfs_user WHERE USERID=%L;', :old.USERID));
- END IF;
- END;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。