当前位置:Gxlcms > 数据库问题 > PostgreSQL dblink

PostgreSQL dblink

时间:2021-07-01 10:21:17 帮助过:10人阅读

由于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!

PostgreSQL dblink

标签:ace   没有   exec   nbsp   series   var   使用   命令   int   

人气教程排行