当前位置:   article > 正文

Kingbase触发器跨库设置(dblink)_如何查看dblink是否连接

如何查看dblink是否连接

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

目录

1、安装dblink:

2、创建dblink连接

3、查询dblink连接

4、关闭dblink连接

5、跨库查询

6、跨库执行ddl,dcl操作(dblink_exec)

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连接;所以我们可以拿来使用。

  1. SELECT * FROM dblink('base_dblink', 'select id, info from public.t1') as base_t1(id int, info text);
  2.   id  | info  
  3. ------+-------
  4.  1001 | xxx
  5. (1 row)

我们也可以直接使用;无需先创建dblink_connect。这是常用的方式。

  1. 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);
  2.   id  | info  
  3. ------+-------
  4.  1001 | xxx
  5. (1 row)

若我们跨库操作create、insert、update、delete语句;其实这种行为一般不跨库操作。慎用!下面演示下insert操作。

  1. SELECT dblink_exec('base_dblink', 'insert into public.t1 values (1002,''hello'')');
  2.  dblink_exec 
  3. -------------
  4.  INSERT 0 1
  5. (1 row)
  6. # OR
  7. SELECT dblink('base_dblink', format('insert into public.t1 select %L, %L', 1003, 'lottu'));
  8.      dblink     
  9. ----------------
  10.  ("INSERT 0 1")
  11. (1 row)

7、触发器执行ddl

  1. CREATE OR REPLACE TRIGGER TR_USER_DEPARTMENT_DATA
  2. after insert or update or delete
  3. ON sfs_user_department
  4. FOR EACH ROW
  5. BEGIN
  6. IF TG_OP = 'INSERT' THEN
  7. dblink_exec('base_dblink', format('INSERT INTO sfs_user(USERID,USERNAME)
  8. VALUES(%L, %L);,
  9. :new.USERID, :new.USERNAME
  10. ));
  11. ELSIF TG_OP = 'UPDATE' THEN
  12. dblink_exec('base_dblink', format('UPDATE sfs_user set USERID=%L,USERNAME=%L
  13. WHERE USERID=%L;',:new.USERID, :new.USERNAME, :old.USERID
  14. ));
  15. ELSIF TG_OP = 'DELETE' THEN
  16. dblink_exec('base_dblink', format('DELETE FROM sfs_user WHERE USERID=%L;', :old.USERID));
  17. END IF;
  18. END;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/781604
推荐阅读
相关标签
  

闽ICP备14008679号