ホームページ >バックエンド開発 >PHPチュートリアル >PostgreSQL 9.5 の新機能: IMPORT FOREIGN SCHEMA_PHP チュートリアル
今回は、時代についていけず率先して学習しようとした社員がいかにして自分の価値を失ったかをストーリー形式でお伝えします。最新機能を理解せずに仕事をする「古参社員」のメリットとリーダーからの信頼。
スモッグのない晴れた朝、技術部門のリーダーがシャオ・ミンをオフィスに呼び、「兄さん、新しいシステムで使用されている生産システムのデータを確認したいのですが、何か比較はありますか?」と尋ねました。新しい PG データベースにそのような解決策はありますか? "
リーダー、本番システムからデータをエクスポートして、新しい PG データベースにインポートするのは問題ありません。
リーダー: 「もっと速くて便利な方法はありますか?」 Xiao Ming: 「リーダー、本番システムからデータをエクスポートして、新しいシステムにインポートするのが簡単です。 " リーダー: "もっと速いです、便利な方法はありますか?" Xiao Ming: "リーダー、本番システムからデータをエクスポートして新しいシステムにインポートするのはすでに非常に高速です。 「 リーダーは、シャオミンの繰り返しのような答えに少しイライラしていました。心の中の焦りを抑えて、彼は尋ねました:「外部テーブルをインポートするには、どのような準備が必要ですか?」
リーダーは尋ねました真剣に「テーブルは合計で何個ありますか?」 シャオミンは突然何かを思い出してささやきました。「ボス...思い出したんですが...約 300 個のテーブルを持つ別のユーザーがいます...」 (-__-|| |) (声が小さすぎて自分ではほとんど聞こえませんでした)
小強が出て行った後、リーダーはタバコに火をつけて、いつもは「頼りない」ように見える小強を待った。
同時に、リーダーも、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;SELECT8music=>createtable ericgaoIIasselect * fromsummary;SELECT8 music=>dListofrelationsスキーマ|名前|タイプ|所有者--------+------------- --------+ ---------------+----------eric|ericgaoi|table|ericeric|ericgaoi| table|ericeric|summary| table|eric(5行) テーブルを除外します:music=>cmusicpostgresこれでデータベース「music」に接続されました、ユーザー"postgres".music=# IMPORTFOREIGNSCHEMAericEXCEPT(summary)FROMSERVERmusic_fdw_serverINTOeric;IMPORTFOREIGNSCHEMA インポート効果を確認します:music=>dソシエーション リストアーキテクチャ モード | 名前 | 所有者------ ----+----------+--------------+---------- eric|ericgaoi| による引用 |postgreseric|ericgaoii| の外観 |postgres (レコードの 2 行) の外観はテーブルの概要を除外しています。 ターゲット ライブラリ内のテーブルを削除し、特定のテーブルの使用状況をテストします: music=>dropforeigntableericgaoi;DROPFOREIGNTABLEmusic=>dropforeigntableericgaoii;DROPFOREIGNTABLE
今回は指定された一部のテーブルのみをインポートします: music=#importforeignschemaericlimitto(summary)fromservermusic_fdw_serverintoeric;IMPORTFOREIGNSCHEMAmusic=>dassociation listschema|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.htmlwww.bkjia.com
true