PostgreSQL 9.5新特性:IMPORT FOREIGN SCHEMA

來源:互聯網
上載者:User

PostgreSQL 9.5新特性:IMPORT FOREIGN SCHEMA


本次以故事的形式講述一名不緊跟時代步伐、不主動積極學習的員工在不瞭解最新特性的情況下,如何失去了“老員工”的優勢和領導的信任。

在一個風和日麗,沒有霧霾的早上,技術部領導把小明叫到了辦公室,問:“兄弟,我想在新的系統上查詢一下在用的生產系統的資料,有沒有比較快速、方便的方法?新的用的PG的資料庫有這種方案嗎?”

小明:“領導,把資料從生產系統中匯出,然後匯入到新系統不就OK?”

領導:“比較快速、方便的方法有沒有?”

小明:“領導,把資料從生產系統中匯出,然後匯入到新系統就很快。”

領導:“更快速、方便的方法有沒有?”

小明:“領導,把資料從生產系統中匯出,然後匯入新系統就已經很快了!”

領導對於小明複讀機似的回答有些惱火,按耐住心中的不耐煩,問了一句:“匯入外部表格需要做什麼準備工作嗎?”


小明胸有成竹的講:“領導,就是實現建立好ddl就行。”

領導認真的問到:“一共多少張表?”

小明有些不確定:“200張?”

領導有些驚訝:“這麼多?!”

小明突然又想起了些什麼,小聲的說:“領導......我剛想起來...還有一個使用者,裡面大概有300張表...”(-__-|||)(聲音小的連他自己都快聽不到了)

領導有點沉不住氣了:“滾出去!”

小明紅著臉說:“領導!你聽我說...”

領導這次徹底的被點燃了:“滾出去!!!”


小明默默的在外面幫領導關上了門......

領導已經氣的不行,此時老闆的電話已打過來:“怎麼樣?搞定沒?”

領導:“沒問題,老闆,稍等片刻!”

老闆:“好的,搞好了說一聲,好跟客戶介紹咱們新開發的系統,起碼有個查詢體驗,等你訊息!抓緊。”

領導此時想起了公司新來的同事小強,雖然小強平時看起來比較逗逼和活潑,但是小強已經是公司為數不多做資料庫的員工了。領導想好了如何跟老闆解釋系統開發進度慢,拖延體驗時間的解釋。抱著試試看的心態,傳召了小強,表達了在此情景下的需求。

小強:“領導,這個問題,我不敢保證能做好,我儘力。”

領導:“平時看你活潑誇張,今天說話有所保留;說說看,你有什麼思路?”

小強:“領導,不動資料庫什麼玩笑我都敢開,真刀真槍幹事兒了,不來那些沒用的話。我前段時間看到PostgreSQL9.5有個新特性,可以簡單的匯入外部表格,按模式匯入,我覺得可以嘗試一下。”

領導:“好,去做吧,注意操作謹慎,別粗心。”

小強:“知道了,半個小時內給您回訊息,不論成功還是失敗,都即時彙報給您。”

小強出門後,領導點了一顆煙,靜待平時看起來“不靠譜”的小強。

同時,領導也在想,小強說的方法理論上聽起來確實不錯,不知道放在實踐中如何,他對比了一下兩位員工的方案:

小明的方案:


小強的方案:


小強回到工位上,倒了杯水,心理有一些壓力,儘管自己剛測試過新功能(匯入外部模式),但是心理還是很緊張,因為他覺得要對領導的信任負責任,要對生產系統的穩定運行負責任,這絕對不是平時打打鬧鬧、說說笑笑之類的胡鬧。

他開啟筆記本,深吸了一口氣,謹慎的進行了操作:

1.確定一下新環境的資料庫版本:

-bash-3.2$psql

psql(9.5beta2)

輸入"help"來擷取協助資訊.

postgres=#selectversion();

version

-------------------------------------------------------------------------------------------------------------

PostgreSQL9.5beta2onx86_64-pc-linux-gnu,compiledbygcc(GCC)4.1.220080704(RedHat4.1.2-55),64-bit

(1行記錄)

2.建立基於使用者的模式:

postgres=#\cmusic

您現在已經串連到資料庫"music",使用者"postgres".

postgres=#createschemaericauthorizationeric;

CREATESCHEMA

3.安裝postgres_fdw外掛程式:

music=#createextensionpostgres_fdw;

CREATEEXTENSION

4.建立外部伺服器對象:

music=#createservermusic_fdw_serverforeigndatawrapperpostgres_fdwoptions(host'192.168.1.143',dbname'music',port'5432');

CREATESERVER

5.建立使用者映射對象:

music=#createusermappingforericservermusic_fdw_serveroptions(user'eric',password'gao');

CREATEUSERMAPPING

串連到生產庫看一下生產庫的表資訊:

music=#\cmusiceric

Youarenowconnectedtodatabase"music"asuser"eric".

music=>\d

Listofrelations

Schema|Name|Type|Owner

--------+---------+---------------+----------

eric|summary|table|eric

...

(200rows)

6.遠程匯入整個schema:

music=#importforeignschemaericfromservermusic_fdw_serverintoeric;

IMPORTFOREIGNSCHEMA

7.查看新系統資料表狀態:

music=>\dsummary;

引用的外部表格"eric.summary"

欄位|類型|修飾詞|FDW選項

------+------------------------+--------+----------------------

id|integer||(column_name'id')

info|charactervarying(128)||(column_name'info')

Server:music_fdw_server

FDWOptions:(schema_name'eric',table_name'summary')

8.調整屬主和許可權:

music=#grantselectoneric.summarytoeric;

GRANT

music=#altertableeric.summaryownertoeric;

ALTERTABLE

9.驗證資料量:

music=>selectcount(*)fromsummary;

count

-------

8

(1行記錄)

資料已經匯入到了新的系統中,小強立刻給領導打電話通報。

領導:“不錯,小強,如果上面要求屏蔽掉某些敏感的表或者是只提供基礎資料好實現嗎?”

小強:“沒問題,我給你我的測試報告吧,最近剛做的。”

測試報告:

在源端建立2個新的表:

music=>createtableericgaoIasselect*fromsummary;

SELECT8

music=>createtableericgaoIIasselect*fromsummary;

SELECT8

music=>\d

Listofrelations

Schema|Name|Type|Owner

--------+-----------+---------------+----------

eric|ericgaoi|table|eric

eric|ericgaoii|table|eric

eric|summary|table|eric

(5rows)

排除某個表:

music=>\cmusicpostgres

您現在已經串連到資料庫"music",使用者"postgres".

music=#IMPORTFOREIGNSCHEMAericEXCEPT(summary)FROMSERVERmusic_fdw_serverINTOeric;

IMPORTFOREIGNSCHEMA

查看一下匯入效果:

music=>\d

關聯列表

架構模式|名稱|類型|擁有者

----------+-----------+--------------+----------

eric|ericgaoi|所引用的外表|postgres

eric|ericgaoii|所引用的外表|postgres

(2行記錄)

已經排除表summary。

刪掉目標庫的表,再測試一下包含某個表的用法:

music=>dropforeigntableericgaoi;

DROPFOREIGNTABLE

music=>dropforeigntableericgaoii;

DROPFOREIGNTABLE

這一次僅匯入某些指定的表:

music=#importforeignschemaericlimitto(summary)fromservermusic_fdw_serverintoeric;

IMPORTFOREIGNSCHEMA

music=>\d

關聯列表

架構模式|名稱|類型|擁有者

----------+---------+--------------+----------

eric|summary|所引用的外表|postgres

(1行記錄)

領導:“謝謝你,小強,回去工作吧”

說著,領導撥通了小明的電話,心想還是要維繫好同事關係,多一份人脈,多很多機會,再說小明也是老員工了,剛才對他發火也有些衝動。

小明進了辦公司,領導微笑著,說:“小明,剛才事出緊急,有些急躁,抱歉。”

小明:“領導,沒關係,確實是我技術不精,以後多多學習!”

領導:“剛才小強把表都整過來了,我看查詢有些慢,你給看一下原因。”

小明:“好的領導,我收集一下資訊,完事兒立刻給你彙報!”

小明回到工位執行了幾條命令,收集了一下效能方面的資訊:

在新系統上:

music=>analyzeeric.summary;

ANALYZE

music=>explainanalyzeselect*fromsummary;

QUERYPLAN

----------------------------------------------------------------------------------------------------------

ForeignScanonsummary(cost=100.00..101.24rows=8width=28)(actualtime=4.308..4.319rows=8loops=1)

Planningtime:0.076ms

Executiontime:8.308ms

(3行記錄)

在生產系統的伺服器看:

music=>analyzeeric.summary;

ANALYZE

music=>explainanalyzeselect*fromsummary;

QUERYPLAN

--------------------------------------------------------------------------------------------------

SeqScanonsummary(cost=0.00..1.08rows=8width=28)(actualtime=0.003..0.004rows=8loops=1)

Planningtime:0.108ms

Executiontime:0.023ms

(3rows)

小明把以上資訊提交給了領導,解釋說:”領導,你看收集到的資訊顯示,遠端表查詢起來就是慢,看來這功能還是不靠譜啊,我建議還是用我的方案,導資料,或者可以買第三方軟體進行同步資料,把資料即時同步到本地。”

領導:”小明...老師...公司花錢請你來是讓你給個報告然後告訴老闆要花錢買新產品的嗎?那還用你做啥?同步資料可以用HotStandby,還用第三方軟體?你一個導資料的方案想通吃所有項目?!目前這查詢速度客戶是可以接受的,並不是相對速度慢就是不可以好嗎?!!想要查遠端資料並且提升一下效能可以用物化視圖好嗎?!!!“

小明:”領導,不好意思...物化視圖是...什嗎?“

領導:”滾出去!!!“


外部表格在查詢速度上還是有一定的延遲的,如果在項目中可以接受實際的查詢速度就OK。如果接受不了,可以嘗試使用物化視圖,當然還有很多方案,方法總比困難多~~~

物化視圖在此就不多浪費篇幅了,如果感興趣的話,可參考如下文章,裡面有對物化視圖的效能測試:

http://gaoqiangdba.blog.163.com/blog/static/245970045201510171821363/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.