這篇文章主要講解了“PostgreSQL如何利用FDW實(shí)現(xiàn)簡(jiǎn)易dblink”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“PostgreSQL如何利用FDW實(shí)現(xiàn)簡(jiǎn)易dblink”吧!
創(chuàng)新互聯(lián)建站長(zhǎng)期為數(shù)千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為靈石企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì),靈石網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
Oracle DATABASE LINK可以訪問(wèn)其他數(shù)據(jù)庫(kù)(實(shí)例)的對(duì)象,使用簡(jiǎn)單而且方便,很多現(xiàn)有應(yīng)用會(huì)涉及到它。
遠(yuǎn)程表
SELECT col_list FROM table_remote@dblink;程序列
遠(yuǎn)程序列
SELECT seq_remote.nextval@dblink FROM dual;
如果應(yīng)用中不少地方用到它,或者說(shuō)面臨很多這類應(yīng)用,而我們又希望盡量少的改動(dòng)應(yīng)用,這里給大家展示一個(gè)簡(jiǎn)單修改PG的辦法應(yīng)對(duì),簡(jiǎn)化起見(jiàn)先說(shuō)說(shuō)表。
這個(gè)格式有一個(gè)明顯的問(wèn)題:@是PG里常見(jiàn)的操作符(或者部分),搜一下:
SELECT oprname FROM pg_operator WHERE oprname like '%@%';
多少個(gè)?60,直接是 @ 本身的就有17個(gè)之多。
我們來(lái)看FROM子句語(yǔ)法(節(jié)選自gram.y)
from_clause:
FROM from_list { $$ = $2; }
| /*EMPTY*/ { $$ = NIL; }
;
from_list:
table_ref { $$ = list_make1($1); }
| from_list ',' table_ref { $$ = lappend($1, $3); }
;
/*
* table_ref is where an alias clause can be attached.
*/
table_ref: relation_expr opt_alias_clause
{
$1->alias = $2;
$$ = (Node *) $1;
}
...(略)
relation_expr:
qualified_name
{
/* inheritance query, implicitly */
$$ = $1;
$$->inh = true;
$$->alias = NULL;
}這里的語(yǔ)法還會(huì)影響到INSERT、CURSOR 等等,因?yàn)橹皇茄菔荆覀兙筒蝗ピu(píng)估對(duì)它們的影響。
CREATE SERVER myserver FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'foo', dbname 'foodb', port '5432');CREATE SCHEMA myserver;CREATE FOREIGN TABLE myserver.films ( code char(5) NOT NULL, title varchar(40) NOT NULL, did integer NOT NULL, date_prod date, kind varchar(10), len interval hour to minute ) SERVER myserver;
這里只是舉個(gè)例子,實(shí)際上采用什么樣的命名規(guī)則完全可以隨意選擇,只要跟當(dāng)前應(yīng)用要求的數(shù)據(jù)結(jié)構(gòu)不沖突即可。
relation_expr:
qualified_name
{
/* inheritance query, implicitly */
$$ = $1;
$$->inh = true;
$$->alias = NULL;
}
| qualified_name Op IDENT
{
/* inheritance query, implicitly */
$$ = $1;
$$->inh = true;
$$->schemaname = $3;
$$->alias = NULL;
}這里應(yīng)該檢查 Op 是不是 @,不然任何操作符都可以。
SELECT * FROM films@myserver;
其實(shí)它相當(dāng)于:
SELECT * FROM myserver.films;
這樣小小的改動(dòng),可能給應(yīng)用開發(fā)人員減少一些修改代碼的苦處。
修改語(yǔ)法的麻煩在于,我們需要確認(rèn)它的影響范圍,簡(jiǎn)單辦法是回歸測(cè)試,如果可以通過(guò),至少證明我們沒(méi)有影響PG原有功能。上邊我們提到了遠(yuǎn)程序列,它要更麻煩些,因?yàn)橹皇茄菔荆簿筒灰灰徽f(shuō)明。并且我們也只是考慮了FROM子句中的實(shí)現(xiàn),其他部分呢?

此外顯而易見(jiàn),DBA的維護(hù)工作會(huì)增多。
如果只是某些表需要遠(yuǎn)程訪問(wèn),這種方式無(wú)疑還是可以接受的,如果某個(gè)系統(tǒng)需要訪問(wèn)幾百?gòu)堖h(yuǎn)程表,就算可以用腳本自動(dòng)創(chuàng)建,顯然也不是件美妙的事情。如果表結(jié)構(gòu)發(fā)生修改呢?所以這里自動(dòng)創(chuàng)建是個(gè)好的選擇,如果每次訪問(wèn)自動(dòng)創(chuàng)建,又會(huì)面臨系統(tǒng)空間膨脹問(wèn)題(跟臨時(shí)表一個(gè)道理),定義一個(gè)刷新策略可以緩解。根本解決辦法是用臨時(shí)數(shù)據(jù)源,這個(gè)改動(dòng)很有趣。
感謝各位的閱讀,以上就是“PostgreSQL如何利用FDW實(shí)現(xiàn)簡(jiǎn)易dblink”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)PostgreSQL如何利用FDW實(shí)現(xiàn)簡(jiǎn)易dblink這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
本文標(biāo)題:PostgreSQL如何利用FDW實(shí)現(xiàn)簡(jiǎn)易dblink
文章路徑:http://www.chinadenli.net/article42/gshcec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、網(wǎng)站導(dǎo)航、用戶體驗(yàn)、企業(yè)建站、營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)