ホームページ >バックエンド開発 >PHPチュートリアル >PostgreSQL 9.5 の新機能: IMPORT FOREIGN SCHEMA_PHP チュートリアル

PostgreSQL 9.5 の新機能: IMPORT FOREIGN SCHEMA_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:00:231021ブラウズ

PostgreSQL 9.5の新機能: IMPORT FOREIGN SCHEMA


今回は、時代についていけず率先して学習しようとした社員がいかにして自分の価値を失ったかをストーリー形式でお伝えします。最新機能を理解せずに仕事をする「古参社員」のメリットとリーダーからの信頼。

スモッグのない晴れた朝、技術部門のリーダーがシャオ・ミンをオフィスに呼び、「兄さん、新しいシステムで使用されている生産システムのデータを確認したいのですが、何か比較はありますか?」と尋ねました。新しい PG データベースにそのような解決策はありますか? "

リーダー、本番システムからデータをエクスポートして、新しい PG データベースにインポートするのは問題ありません。

リーダー: 「もっと速くて便利な方法はありますか?」

Xiao Ming: 「リーダー、本番システムからデータをエクスポートして、新しいシステムにインポートするのが簡単です。 "

リーダー: "もっと速いです、便利な方法はありますか?"

Xiao Ming: "リーダー、本番システムからデータをエクスポートして新しいシステムにインポートするのはすでに非常に高速です。 「

リーダーは、シャオミンの繰り返しのような答えに少しイライラしていました。心の中の焦りを抑えて、彼は尋ねました:「外部テーブルをインポートするには、どのような準備が必要ですか?」

リーダーは尋ねました真剣に「テーブルは合計で何個ありますか?」 シャオミンは突然何かを思い出してささやきました。「ボス...思い出したんですが...約 300 個のテーブルを持つ別のユーザーがいます...」 (-__-|| |) (声が小さすぎて自分ではほとんど聞こえませんでした)

リーダーは少しイライラしました:「出て行け!」

シャオミンは顔を真っ赤にして言いました:「リーダー!私の言うことを聞いてください」 ...「

今度はリーダーが完全に発火しました:「出て行け!」

シャオミンはリーダーのために静かにドアを閉めました...

いいえ、上司が電話しましたこの時点で: 「どうですか?もう終わりましたか?」

リーダー: 「問題ありません、ボス、ちょっと待ってください!」

ボス: 「わかりました。完了しました。私たちの新しく開発したシステムをお客様に紹介してください。少なくとも私たちはあなたのニュースを待っています! "

このとき、リーダーは会社の新しい同僚であるシャオチャンのことを思い出しましたが、シャオチャンはいつもおかしいようです。しかし、Xiaoqiang はすでに社内でデータベースに取り組む数少ない従業員の 1 人です。リーダーは、システム開発の進捗が遅く、経験時間が遅れていることを上司にどう説明するかを考えました。やってみようという気持ちで、Xiaoqiang を呼び出し、この状況でのニーズを伝えました。


Xiaoqiang:「リーダー、私がこの問題で良い仕事ができるかどうかは保証できません。最善を尽くします。」

リーダー:「いつもは元気で大袈裟な姿をしていますが、今日のあなたは。」あなたの言葉は控えめです、教えてください、何かアイデアはありますか? "

Xiaoqiang: "リーダー、私はデータベースを使わずに何かをすることができますし、無駄なものは使いません。しばらく前に PostgreSQL 9.5 の新機能を見ました。外部テーブルをインポートしてモードごとにインポートできると思います。「

」油断しないでください。」

Xiaoqiang: 「わかっています、半分。数時間以内に返信します。成功か失敗かに関係なく、すぐに報告します。」

小強が出て行った後、リーダーはタバコに火をつけて、いつもは「頼りない」ように見える小強を待った。

同時に、リーダーも、Xiaoqiang の言った方法は理論的には良さそうだと考えていましたが、実際にどのように機能するかはわかりませんでした。彼は 2 人の従業員の計画を比較しました。ミンの計画:


シャオチャンはワークステーションに戻り、水をコップに注ぎ、少し精神的に落ち込んだ彼はストレスを感じていたにもかかわらず、新しい機能 (外部モードのインポート) をテストしたばかりです)、しかし、彼はリーダーの信頼と本番システムの安定した動作に責任を負わなければならないと感じているため、まだ非常に緊張しています。これは決して、よくある遊びのようなナンセンスではありません。周りで冗談を言います。


彼はノートブックを開いて深呼吸し、慎重に操作しました:

1. 新しい環境のデータベース バージョンを確認します:

-bash-3.2$psql

psql (9.5beta2)

「ヘルプ」と入力するとヘルプ情報が表示されます。

postgres=#selectversion();

バージョン

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

PostgreSQL9.5beta2onx86_64-pc-linux -gnu,コンパイル済み bygcc(GCC)4.1.220080704(RedHat4.1.2-55)、64 ビット

(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. ユーザー マッピング オブジェクトを作成します。

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

CREATEUSERMAPPING

本番ライブラリのテーブル情報を確認するには、

music=#cmusiceric

現在データベースに接続されています"music" asuser"eric".

music=>d

関係リスト

スキーマ|名前|タイプ|所有者

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

eric|要約|表|eric

...

(200行)

6. スキーマ全体のリモート インポート:

music=#importforeignschemaericfromservermusic_fdw_serverintoeric;

IMPORTFOREIGNSCHEMA

7. 新しいシステム テーブルのステータスを表示します:

music=>d概要;

参照された外部テーブル「eric.概要"

フィールド|タイプ|修飾子|FDW オプション

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

id|integer||(column_name'id')

info|charactervariing(128)||(column_name '情報')

サーバー:music_fdw_server

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

8. 所有者と権限を調整します:

music=#grantselectoneric.summarytoeric;

GRANT

summary。オーナーテリック;

ALTERTABLE

9. 検証データ量:

music=>selectcount(*)fromsummary;

count

-----

8

(1行のレコード)

データは新しいシステムにインポートされました。Xiaoqiang さんはすぐにリーダーに電話して知らせました。

リーダー: 「はい、Xiaoqiang、一部の機密テーブルをブロックする必要がある場合、または基本的なデータのみを提供する必要がある場合、実装は簡単ですか?

Xiaoqiang: 「問題ありません、テストレポートをお渡しします」 、最近実行したばかりです。「

テストレポート:

ソース側に2つの新しいテーブルを作成します:

music=>createtableericgaoIasselect*fromsummary;

SELECT8

music=>createtable ericgaoIIasselect * fromsummary;

SELECT8

music=>d

Listofrelations

スキーマ|名前|タイプ|所有者

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

eric|ericgaoi|table|eric

eric|ericgaoi| table|eric

eric|summary| table|eric

(5行)

テーブルを除外します:

music=>cmusicpostgres

これでデータベース「music」に接続されました、ユーザー"postgres".

music=# IMPORTFOREIGNSCHEMAericEXCEPT(summary)FROMSERVERmusic_fdw_serverINTOeric;

IMPORTFOREIGNSCHEMA

インポート効果を確認します:

music=>d

ソシエーション リスト

アーキテクチャ モード | 名前 | 所有者

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

eric|ericgaoi| による引用 |postgres

eric|ericgaoii| の外観 |postgres

(レコードの 2 行)

の外観はテーブルの概要を除外しています。

ターゲット ライブラリ内のテーブルを削除し、特定のテーブルの使用状況をテストします:

music=>dropforeigntableericgaoi;

DROPFOREIGNTABLE

music=>dropforeigntableericgaoii;

DROPFOREIGNTABLE

今回は指定された一部のテーブルのみをインポートします:

music=#importforeignschemaericlimitto(summary)fromservermusic_fdw_serverintoeric;

IMPORTFOREIGNSCHEMA

music=>d

association list

schema|name|type|owner

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

引用: postgres |

(1行記録)

リーダー:「ありがとう、シャオ強、仕事に戻って」

そう言って、リーダーはシャオミンの電話番号にダイヤルしました、心はそうだと思います同僚と良好な関係を維持し、より多くの人脈を築き、より多くの機会を得る方が良いです。それに、シャオミンも古い従業員なので、今私は少し衝動的に彼に腹を立てました。

シャオミンがオフィスに入ると、リーダーは微笑んで言いました:「シャオミン、今緊急事態が発生して少し焦っていました。ごめんなさい。」

リーダー:「シャオチャンはちょうどテーブルを整理したところです。」クエリが少し遅いようです。理由を教えてください。」

シャオ・ミン: 「わかりました、リーダー、すぐに報告します。」

シャオ・ミンは戻ってきました。彼のワークステーションでいくつかのコマンドを実行し、いくつかのパフォーマンス情報を収集しました:

新しいシステムの場合:

music=>analyzeeric.summary;

ANALYZE

music=>explainanalyzeselect*fromsummary;

クエリプラン

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

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

計画時間:0.076ms

実行時間:8.308 ms

(3 行のレコード)

本番システムのサーバーを見てください:

music=&g t;analyzeeric.summary ;

ANALYZE

music=&gと; Explainanalyzeselect*fromsummary;

クエリプラン

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

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

計画時間: 0.108ms

実行時間:0.023ms

(3行)

Xiao Mingは上記の情報をリーダーに提出し、次のように説明しました。「リーダー、収集された情報を見てください。リモートテーブルクエリは遅いです。この機能はまだ信頼できないようです。私は提案します」私のソリューションを使用してデータをインポートするか、サードパーティのソフトウェアを購入してデータを同期し、データをリアルタイムでローカルに同期することができます。 「

リーダー:「シャオミン…先生…会社はあなたにここに来て報告をするようお金を払って、それから新しい製品を買うためにお金を使うように上司に言いましたか?」他に何をする必要がありますか? HotStandby を使用してデータを同期したり、サードパーティ ソフトウェアを使用したりできますか?すべてのプロジェクトをカバーするデータ インポート プランを導入しますか? !現在のクエリ速度は顧客にとって許容できるものですか? 比較的遅いということですか? ! !リモート データを確認してパフォーマンスを向上させたい場合、マテリアライズド ビューを使用できますか? ! ! ! "

シャオミン:" リーダー、申し訳ありません... マテリアライズド ビューとは何ですか? 「

リーダー:「出て行け!」 ! ! "


外部テーブルのクエリ速度にはまだ一定の遅れがあります。実際のクエリ速度がプロジェクトで受け入れられる場合は問題ありません。受け入れられない場合は、もちろん、マテリアライズドビューを使用してみることもできます。解決策はたくさんありますが、その方法は常に困難よりも困難です~~~

マテリアライズドビューは多くのスペースを無駄にしません。興味がある場合は、ここを参照してください。マテリアライズド ビューのパフォーマンス テストを含む次の記事:

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

http://www.bkjia.com/PHPjc/1093772.html

www.bkjia.com

tru​​e

技術記事 PostgreSQL 9.5の新機能: IMPORT FOREIGN SCHEMA 今回は、時代についていかず率先して学習する社員が最新機能を理解していない様子をストーリー形式でお伝えします...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。