zoukankan      html  css  js  c++  java
  • PostgreSQL dblink

    由于postgresql 数据库中,跨库查询不能像SQL server一样直接dbname.table 调用将多个库的不同表join一起查询。

    因此想到了SQL server中的link server的方式,在postgresql数据库中可以使用dblin的方式实现。

    1. 安装dblink

    一般数据库安装时即默认安装了此模块,没有安装的可百度安装方法。

    2.安装扩展

    create extension dblink;

    使用以上语句可以在当前库安装dblink扩展组件。

    安装完成后可以用如下语句查询扩展信息,如果显示有dblink 即表示已有扩展。

    select * from pg_extension;

    注意安装扩展的schema,在调用的时候不在同一个schema下会提示dblink不存在,可通过如下sql查看dblink安装的schema。

    select nspname as schema
    from pg_extension e
    join pg_namespace n on n.oid = e.extnamespace
    where extname = 'dblink'

    为了方便查询可在修改查询的路径,把常用的schema添加到查询检索中指定sql 执行时的schema范围。

    set search_path to public, split;

    3.使用

    常规使用

    --常规使用
    select * from dblink('hostaddr=192.168.0.105 port=5432 dbname=yjtBackstagePermissions user=postgres password=123456','select "NikeName" from "People"') AS testTable ("NikeName" VARCHAR);
    --如果不只是查询数据,而是需要修改数据库数据的情况下怎么弄呢?
    1. 先执行dblink_connect保持连接
    SELECT dblink_connect('mycoon','hostaddr=192.168.0.105 port=5432 dbname=yjtBackstagePermissions user=postgres password=123456');
    2. 执行BEGIN命令
    SELECT dblink_exec('mycoon', 'BEGIN');
    3. 执行数据操作(update,insert,create等命令)
    SELECT dblink_exec('mycoon', 'insert into tb1 select generate_series(10,20),''hello''');
    SELECT dblink_exec('mycoon', 'insert into people(username,nikename) values ("张三","小三") ');
    4. 执行事务提交
    SELECT dblink_exec('mycoon', 'COMMIT');
    5. 解除连接
    SELECT dblink_disconnect('mycoon');
    

      

    dblink配合视图view使用,毕竟每次写dblink有点多余

    CREATE VIEW people_nikename_view AS 
    select * from dblink('hostaddr=192.168.0.105 port=5432 dbname=yjtBackstagePermissions user=postgres password=123456','select "NikeName" from "People"') AS testTable ("NikeName" VARCHAR);
    

      

    使用部分参考了 复城大师兄博客,thanks!

  • 相关阅读:
    设计模式之单例模式
    常用正则表达式
    前台页面json格式数据中文显示问号
    关于SpringMVC中静态资源配置问题
    Tomcat 9启动后控制台中文输出乱码问题
    SpringAOP中 order属性问题
    避坑!Mybatis Generator 生成文件的时候错误使用了其它数据库的同名数据表(关于nullCatalogMeansCurrent参数)
    关于JDBC中 Statement 和 PreparedStatement的区别
    关于Class.newInstance()方法被弃用
    Celery
  • 原文地址:https://www.cnblogs.com/binw/p/PostgreSQL.html
Copyright © 2011-2022 走看看