Kingbase触发器跨库设置(dblink)

        参考:https://www.cnblogs.com/lottu/p/13331387.html

目录

1、安装dblink:

2、创建dblink连接

3、查询dblink连接

4、关闭dblink连接

5、跨库查询

7、触发器执行ddl


        dblink是一个支持从数据库会话中连接到其他Kingbase数据库的插件。在其他数据库跨库操作也是采用dblink的方式。

1、安装dblink:

create extension dblink ;

2、创建dblink连接

select dblink_connect('base_dblink','hostaddr=127.0.0.1 port=54321 dbname=base user=base password=base');

3、查询dblink连接

select dblink_get_connections()

4、关闭dblink连接

SELECT dblink_disconnect('base_dblink');

5、跨库查询

使用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)

7、触发器执行ddl

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;

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值