主頁(yè) > 知識(shí)庫(kù) > postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)

postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)

熱門(mén)標(biāo)簽:奧維地圖標(biāo)注字體大小修改 北京智能外呼系統(tǒng)供應(yīng)商家 高德地圖標(biāo)注電話(huà)怎么沒(méi)了 智能電銷(xiāo)機(jī)器人教育 電話(huà)機(jī)器人錄音師薪資 中國(guó)地圖標(biāo)注省份用什么符號(hào) 無(wú)錫梁溪公司怎樣申請(qǐng)400電話(huà) 江西穩(wěn)定外呼系統(tǒng)供應(yīng)商 孝感銷(xiāo)售電銷(xiāo)機(jī)器人廠家

前言
最近在工作的時(shí)候 需要用數(shù)據(jù)庫(kù)A中的表a1來(lái)更新插入數(shù)據(jù)庫(kù)B中的b2表 由于數(shù)據(jù)庫(kù)都是postgres數(shù)據(jù)庫(kù)
我想到了 postgres_fdw插件

準(zhǔn)備工作
首先需要保證這兩個(gè)數(shù)據(jù)庫(kù)之間網(wǎng) 是通的

數(shù)據(jù)庫(kù)A 名字 AA ip 10.10.2.100(虛構(gòu))端口 5432 用戶(hù)名 postgres
數(shù)據(jù)庫(kù)B 名字 BB ip 100.20.0.120(虛構(gòu))端口 6688 用戶(hù)名 postgres

一 利用fdw創(chuàng)建2個(gè)數(shù)據(jù)庫(kù)之間的連接

1.1 安裝 postgres_fdw插件

Create extension "postgres_fdw";

 

1.2 創(chuàng)建外部連接

無(wú)論你實(shí)在A數(shù)據(jù)庫(kù)中創(chuàng)建B數(shù)據(jù)庫(kù)的連接 ,還是在B數(shù)據(jù)庫(kù)中創(chuàng)建A數(shù)據(jù)庫(kù)的連接 從本質(zhì)上是一樣的,都是為了打通2個(gè)數(shù)據(jù)庫(kù),實(shí)現(xiàn)數(shù)據(jù)互通
1.2.1 在A數(shù)據(jù)庫(kù)創(chuàng)建b數(shù)據(jù)庫(kù)的連接

 --創(chuàng)建外部服務(wù)器
-- 括號(hào)里的三個(gè)參數(shù),分別是數(shù)據(jù)庫(kù)b的ip、端口和數(shù)據(jù)庫(kù)名稱(chēng)
CREATE SERVER lianjiebb FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '100.20.0.120', port '6688', dbname 'BB');
--創(chuàng)建用戶(hù)映射·
-- 括號(hào)里的兩個(gè)參數(shù),分別是數(shù)據(jù)庫(kù)b數(shù)據(jù)庫(kù)的用戶(hù)名、密碼
create user mapping for postgres server lianjiebb options(user 'postgres', password '數(shù)據(jù)庫(kù)密碼');

1.2.2 在b數(shù)據(jù)庫(kù)創(chuàng)建a數(shù)據(jù)庫(kù)的連接

--創(chuàng)建外部服務(wù)器
-- 括號(hào)里的三個(gè)參數(shù),分別是數(shù)據(jù)庫(kù)a的ip、端口和數(shù)據(jù)庫(kù)名稱(chēng)
CREATE SERVER lianjieAA FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host '10.10.2.100', port '5432', dbname 'AA');
--創(chuàng)建用戶(hù)映射·
-- 括號(hào)里的兩個(gè)參數(shù),分別是數(shù)據(jù)庫(kù)a數(shù)據(jù)庫(kù)的用戶(hù)名、密碼
create user mapping for postgres server lianjieAA options(user 'postgres', password '數(shù)據(jù)庫(kù)密碼');

1.2.3 查詢(xún) 外部鏈接

select * from pg_foreign_server;

1.3 創(chuàng)建外部表

在A數(shù)據(jù)庫(kù)創(chuàng)建b1表的外部鏈接

CREATE FOREIGN TABLE tb_fdw_b1
 (
 collect_time timestamp(6),
 id varchar(36) ,
 列名1 numeric(12,2) ,
 列名2 int4 ,
列名3 timestamp(6)
 ) --跟b1 一模一樣的表結(jié)構(gòu)就行
 server lianjiebb --你創(chuàng)建的外部鏈接名字
 options (table_name '時(shí)序庫(kù)的表名');

查看外部表是否有數(shù),有數(shù)就表示ok了

select * from tb_fdw_b1;

在數(shù)據(jù)庫(kù)b上創(chuàng)建a1表的外部鏈接也是一樣的

二 插入數(shù)據(jù)

2.1 往外部表tb_fdw_b1 插入表a1的數(shù)據(jù)

因?yàn)?倆個(gè)表都是一樣的表結(jié)構(gòu),可以直接插入

INSERT into tb_fdw_b1 SELECT * from a1;

因?yàn)橥獠勘硎菍?shí)時(shí)的 在數(shù)據(jù)庫(kù)a中更改了 外部表tb_fdw_b1 的數(shù)據(jù) ,數(shù)據(jù)庫(kù)B中的b1表中的數(shù)據(jù)也隨之改變 達(dá)成了我們一開(kāi)始的目的

更新 UPDATE 刪除DELETE 也是一樣的 在這里就不說(shuō)了

三 利用定時(shí)任務(wù)來(lái)達(dá)成自動(dòng)同步

每天都需要執(zhí)行顯然不符合我們的“懶人”形象 ,所以用定時(shí)任務(wù)來(lái)實(shí)現(xiàn)明天自動(dòng)同步是必不可少的 我讓他每天早上8點(diǎn)自動(dòng)執(zhí)行

3.1 利用 pgadmin實(shí)現(xiàn)定時(shí)同步(截圖)

3.1.1

3.1.2

3.1.3

3.1.4

3.2 直接上語(yǔ)句實(shí)現(xiàn)定時(shí)同步

DO $$
DECLARE
 jid integer;
 scid integer;
BEGIN
-- Creating a new job
INSERT INTO pgagent.pga_job(
 jobjclid, jobname, jobdesc, jobhostagent, jobenabled
) VALUES (
 1::integer, '更新表b1'::text, ''::text, ''::text, true
) RETURNING jobid INTO jid;

-- Steps
-- Inserting a step (jobid: NULL)
INSERT INTO pgagent.pga_jobstep (
 jstjobid, jstname, jstenabled, jstkind,
 jstconnstr, jstdbname, jstonerror,
 jstcode, jstdesc
) VALUES (
 jid, '更新表b1'::text, true, 's'::character(1),
 ''::text, '數(shù)據(jù)庫(kù)A'::name, 'f'::character(1),
 ' INSERT into tb_fdw_b1 SELECT * from a1;'::text, ''::text
) ;

-- Schedules
-- Inserting a schedule
INSERT INTO pgagent.pga_schedule(
 jscjobid, jscname, jscdesc, jscenabled,
 jscstart, jscend, jscminutes, jschours, jscweekdays, jscmonthdays, jscmonths
) VALUES (
 jid, '更新表b1'::text, ''::text, true,
 '2021-02-07 10:24:50 +08:00'::timestamp with time zone, '2100-02-07 10:24:52 +08:00'::timestamp with time zone,
 -- Minutes
 ARRAY[true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Hours
 ARRAY[false,false,false,false,false,false,false,false,true,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Week days
 ARRAY[false,false,false,false,false,false,false]::boolean[],
 -- Month days
 ARRAY[false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false,false]::boolean[],
 -- Months
 ARRAY[false,false,false,false,false,false,false,false,false,false,false,false]::boolean[]
) RETURNING jscid INTO scid;
END
$$;

到此這篇關(guān)于postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通的文章就介紹到這了,更多相關(guān)postgresql實(shí)現(xiàn)數(shù)據(jù)互通內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • python連接PostgreSQL數(shù)據(jù)庫(kù)的過(guò)程詳解
  • PHP連接及操作PostgreSQL數(shù)據(jù)庫(kù)的方法詳解
  • C# 操作PostgreSQL 數(shù)據(jù)庫(kù)的示例代碼
  • 在Ubuntu中安裝Postgresql數(shù)據(jù)庫(kù)的步驟詳解
  • Linux下創(chuàng)建Postgresql數(shù)據(jù)庫(kù)的方法步驟

標(biāo)簽:臨滄 泰州 通化 荊州 那曲 齊齊哈爾 海北 阜陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)》,本文關(guān)鍵詞  postgresql,利用,fdw,來(lái),實(shí)現(xiàn),;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于postgresql 利用fdw來(lái)實(shí)現(xiàn)不同數(shù)據(jù)庫(kù)之間數(shù)據(jù)互通(推薦)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章