您好,登錄后才能下訂單哦!
這篇文章主要講解了“PostgreSQL如何利用FDW實現簡易dblink”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“PostgreSQL如何利用FDW實現簡易dblink”吧!
Oracle DATABASE LINK可以訪問其他數據庫(實例)的對象,使用簡單而且方便,很多現有應用會涉及到它。
遠程表
SELECT col_list FROM table_remote@dblink;程序列
遠程序列
SELECT seq_remote.nextval@dblink FROM dual;
如果應用中不少地方用到它,或者說面臨很多這類應用,而我們又希望盡量少的改動應用,這里給大家展示一個簡單修改PG的辦法應對,簡化起見先說說表。
這個格式有一個明顯的問題:@是PG里常見的操作符(或者部分),搜一下:
SELECT oprname FROM pg_operator WHERE oprname like '%@%';
多少個?60,直接是 @ 本身的就有17個之多。
我們來看FROM子句語法(節選自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; }
這里的語法還會影響到INSERT、CURSOR 等等,因為只是演示,我們就不去評估對它們的影響。
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;
這里只是舉個例子,實際上采用什么樣的命名規則完全可以隨意選擇,只要跟當前應用要求的數據結構不沖突即可。
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; }
這里應該檢查 Op 是不是 @,不然任何操作符都可以。
SELECT * FROM films@myserver;
其實它相當于:
SELECT * FROM myserver.films;
這樣小小的改動,可能給應用開發人員減少一些修改代碼的苦處。
修改語法的麻煩在于,我們需要確認它的影響范圍,簡單辦法是回歸測試,如果可以通過,至少證明我們沒有影響PG原有功能。上邊我們提到了遠程序列,它要更麻煩些,因為只是演示,也就不一一說明。并且我們也只是考慮了FROM子句中的實現,其他部分呢?
此外顯而易見,DBA的維護工作會增多。
如果只是某些表需要遠程訪問,這種方式無疑還是可以接受的,如果某個系統需要訪問幾百張遠程表,就算可以用腳本自動創建,顯然也不是件美妙的事情。如果表結構發生修改呢?所以這里自動創建是個好的選擇,如果每次訪問自動創建,又會面臨系統空間膨脹問題(跟臨時表一個道理),定義一個刷新策略可以緩解。根本解決辦法是用臨時數據源,這個改動很有趣。
感謝各位的閱讀,以上就是“PostgreSQL如何利用FDW實現簡易dblink”的內容了,經過本文的學習后,相信大家對PostgreSQL如何利用FDW實現簡易dblink這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。