时间: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