最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL的dblink擴展模塊使用

 更新時間:2025年06月16日 10:08:59   作者:老蘇暢談運維  
PostgreSQL dblink擴展支持跨庫查詢,需定義返回列名和類型,可以實現(xiàn)在不同的數(shù)據(jù)庫之間進行通信和交互,下面就一起來了解一下

PostgreSQL想要在A庫下查詢B庫的表,可以使用dblink插件。PostgreSQL的dblink是一個支持在一個數(shù)據(jù)庫會話中連接到其他PostgreSQL數(shù)據(jù)庫的擴展模塊,可以實現(xiàn)在不同的數(shù)據(jù)庫之間進行通信和交互。

它可以讓你在一個數(shù)據(jù)庫中訪問另一個數(shù)據(jù)庫的表和函數(shù),甚至可以在不同的服務器之間進行數(shù)據(jù)交互。

pgsql9.6版本以后自帶,不需要手動安裝,另外PG使用dblink執(zhí)行一個遠程查詢時,必須在調用時定義返回的列名和類型。

dblink用法

創(chuàng)建 pg dblink擴展

CREATE EXTENSION IF NOT EXISTS dblink;
###如果已經有,可以在 pg 擴展表查到
SELECT * FROM pg_extension WHERE extname = 'dblink'; 
或使用\dx 
postgres=# \dx
                                                 已安裝擴展列表
        名稱        | 版本 |  架構模式  |                                  描述
--------------------+------+------------+------------------------------------------------------------------------
 adminpack          | 2.1  | pg_catalog | administrative functions for PostgreSQL
 dblink             | 1.2  | postgres   | connect to other PostgreSQL databases from within a database
 oracle_fdw         | 1.2  | postgres   | foreign data wrapper for Oracle access
 pg_stat_statements | 1.9  | postgres   | track planning and execution statistics of all SQL statements executed
 plpgsql            | 1.0  | pg_catalog | PL/pgSQL procedural language

建立遠程連接

SELECT dblink_connect('local_connect','hostaddr=127.0.0.1 port=5432 dbname=xxxx user=xxxx password=xxxx') as dev;
解釋:
'local_connect'  是我自定義的連接的名稱
hostaddr=127.0.0.1  表示是本機地址
port=5432  表示使用5432端口,自行設置
dbname  表示要訪問的數(shù)據(jù)庫的名稱
user,password分別表示用戶名和密碼,根據(jù)自己配置的用戶名密碼更改

如:
postgres=# SELECT dblink_connect('local_connect','hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr') as dev;

 dev
-----

 OK
(1 行記錄)

-- 查詢所有已鏈接的dblink
select dblink_get_connections();

PS:

當dblink連接的是同一個PG實例下的不同數(shù)據(jù)庫時,hostaddr就寫 127.0.0.1,不用寫實際的實例地址。
當是不同實例時,需要寫正確的實例,且這兩個實例地址間網(wǎng)絡是通的。

查詢所有已鏈接的dblink

postgres=# select dblink_get_connections();
 dblink_get_connections
------------------------
 {local_connect}
(1 行記錄)

執(zhí)行查詢

--跨庫查詢
SELECT num,id FROM dblink('local_connect','select num,id from hr.demotable') as t(num numeric,id integer);
SELECT * FROM dblink('local_connect','select num,id from hr.demotable') as t(num numeric,id integer);
SELECT * FROM dblink('local_connect','select * from hr.demotable') as t(num numeric,id integer);

--跨庫查詢寫入
insert into t_dblink
select * from dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable where id<1000') as t(num numeric,id integer);

####使用 dblink 函數(shù)從遠程數(shù)據(jù)庫獲取數(shù)據(jù)。 local_connect是預先配置好的遠程數(shù)據(jù)庫連接名
####dblink 中查詢語句被引號括起來,如果查詢語句本身有引號,需要多寫一個引號做轉義
####AS t()表示dblink返回的結果集定義了一個別名't',并指定了每個列的數(shù)據(jù)類型

關閉連接

-- 關閉遠程連接
###在PostgreSQL中dblink是會話級別;會話斷開即dblink也關閉。當然也可以在會話中手動關閉
SELECT dblink_disconnect('local_connect');

-- 查詢所有已鏈接的dblink
select dblink_get_connections();

dblink 擴展

簡便寫法

上面使用方法比較繁瑣,要先創(chuàng)建 dblink連接才能使用,也可以寫成下面這種方式,在一個語句中完成:

--直接寫 dblink 方式,預先配置好的到遠程數(shù)據(jù)庫的連接名 
SELECT * FROM dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable') as t(num numeric,id integer);


create table t_dblink as select * from dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable where 1=2') as t(num numeric,id integer);

insert into t_dblink
select * from dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable where id<1000') as t(num numeric,id integer);

explain analyze with t_temp as (select * from dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable where id<1000') as t(num numeric,id integer)) 
select a.num,a.id from t_dblink a,t_temp b where a.id=b.id;

使用dblink查詢要帶有conn_str,非常不簡潔,可以考慮在會話使用臨時表/視圖來保存。

臨時表調用方式

postgres=# create temp table t_dblink as SELECT * FROM dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable') as t(num numeric,id integer);
SELECT 1000000
postgres=# select * from t_dblink;
...........

--退出后重新進去臨時表不存在
postgres=# select * from t_dblink;
錯誤:  關系 "t_dblink" 不存在
第1行select * from t_dblink;

視圖調用方式

如果認為每次查詢都要寫dblink的一堆信息很麻煩的話,可以在db中建一個view來解決

postgres=# create view  v_dblink as SELECT * FROM dblink('hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr','select * from hr.demotable') as t(num numeric,id integer);
CREATE VIEW
postgres=# select * from v_dblink;
................
--退出后,重新執(zhí)行
postgres=# select * from v_dblink;

到底選擇視圖/臨時表,看你需求。在PostgreSQL中臨時表在會話結束后是不會保持的,這樣的好處:不使用的話無需去刪除對應的臨時表。

跨庫執(zhí)行ddl/dml操作

–如果需要跨庫執(zhí)行ddl、dml操作,使用dblink_exec

SELECT dblink_connect('local_connect','hostaddr=127.0.0.1 port=5432 dbname=hrdb user=hr password=hr') as dev;
SELECT dblink_exec('local_connect', 'create table aa(id int,name varchar(50))');
SELECT dblink_exec('local_connect', 'drop table aa');
SELECT dblink_exec('local_connect', 'insert into hr.t values (1011102,8999,''hello'',''2048-10-09''::date)');
SELECT dblink_exec('local_connect', 'delete from  hr.t values where id=1011102');

總結

PostgreSQL使用這種dblink,存在優(yōu)勢是即取即用,無須在創(chuàng)建其他對象;劣勢是只能連通posrgresql的不同數(shù)據(jù)庫,不能進行異構數(shù)據(jù)庫的連通。當然如果需要連接異構的數(shù)據(jù)庫,可以使用Foreign Data Wrapper(FDW)插件,后面再來說說這個的使用方法。

到此這篇關于PostgreSQL的dblink擴展模塊使用的文章就介紹到這了,更多相關PostgreSQL dblink擴展內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Postgresql去重函數(shù)distinct的用法說明

    Postgresql去重函數(shù)distinct的用法說明

    這篇文章主要介紹了Postgresql去重函數(shù)distinct的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 啟動PostgreSQL服務器 并用pgAdmin連接操作

    啟動PostgreSQL服務器 并用pgAdmin連接操作

    這篇文章主要介紹了啟動PostgreSQL服務器 并用pgAdmin連接操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • docker快速部署postgresql的完整步驟記錄

    docker快速部署postgresql的完整步驟記錄

    PostgreSQL?(pSQL)?是一個功能強大的開源關系型數(shù)據(jù)庫系統(tǒng),使用?Docker?部署?PostgreSQL?可以快速搭建開發(fā)、測試或生產環(huán)境,下面這篇文章主要介紹了docker快速部署postgresql的相關資料,需要的朋友可以參考下
    2025-09-09
  • PostgreSQL如何根據(jù)字符串的長度排序

    PostgreSQL如何根據(jù)字符串的長度排序

    在PostgreSQL數(shù)據(jù)庫中,可以通過LENGTH函數(shù)獲取字符串的長度,并據(jù)此進行排序,LENGTH函數(shù)會計算并返回字符串的字符數(shù)量,要根據(jù)字符串長度進行升序排序,可以在SQL查詢中直接使用LENGTH函數(shù),本文介紹PostgreSQL如何根據(jù)字符串的長度排序,感興趣的朋友一起看看吧
    2024-11-11
  • PostgreSQL 刪除check約束的實現(xiàn)

    PostgreSQL 刪除check約束的實現(xiàn)

    這篇文章主要介紹了PostgreSQL 刪除check約束的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 解決postgresql 自增id作為key重復的問題

    解決postgresql 自增id作為key重復的問題

    這篇文章主要介紹了解決postgresql 自增id作為key重復的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Mac?OS上安裝PostgreSQL完整圖文教程

    Mac?OS上安裝PostgreSQL完整圖文教程

    這篇文章主要介紹了Mac?OS上安裝PostgreSQL的完整圖文教程,問文中通過代碼詳細介紹了如何設置密碼、允許遠程連接、常用命令、備份與恢復、卸載以及常見問題解決方法,需要的朋友可以參考下
    2026-01-01
  • PostgreSQL全面查看用戶權限的方法

    PostgreSQL全面查看用戶權限的方法

    PostgreSQL查看用戶權限的全面方法,包括基本屬性、數(shù)據(jù)庫、模式、表、列、函數(shù)、序列權限,以及使用工具和內置函數(shù)進行綜合查詢,本文介紹PostgreSQL全面查看用戶權限的方法,感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • PostgreSQL教程(十二):角色和權限管理介紹

    PostgreSQL教程(十二):角色和權限管理介紹

    這篇文章主要介紹了PostgreSQL教程(十二):角色和權限管理介紹,本文講解了數(shù)據(jù)庫角色、角色屬性、權限、角色成員,需要的朋友可以參考下
    2015-05-05
  • PostgreSQL 實現(xiàn)distinct關鍵字給單獨的幾列去重

    PostgreSQL 實現(xiàn)distinct關鍵字給單獨的幾列去重

    這篇文章主要介紹了PostgreSQL 實現(xiàn)distinct關鍵字給單獨的幾列去重,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

射洪县| 莫力| 蓬莱市| 双城市| 桑植县| 江永县| 米易县| 保康县| 宁海县| 金门县| 嘉峪关市| 翁源县| 谢通门县| 洱源县| 深水埗区| 沽源县| 孝昌县| 黔西| 台湾省| 武定县| 太湖县| 张北县| 忻城县| 大埔县| 麻阳| 合作市| 司法| 呈贡县| 清原| 成安县| 鹰潭市| 永顺县| 渝中区| 菏泽市| 温宿县| 和政县| 聂拉木县| 阿巴嘎旗| 大田县| 靖安县| 北票市|