Professional Documents
Culture Documents
2 19:51 ページ90
04
pter の
Cha
SQ L せ
tgre い 倒
Pos を 使
ー ル tore,
ツ _res
付属 pg_dump,db の Tips 集
pg
psq
l, acuum
v
データベースへ接続
はじめに
データベースに接続するには,サーバ名(またはIP
本章ではPostgreSQL の付属ツールについて解説し アドレス),ポート番号,接続ユーザ名,データベー
ます.ツールの全機能を1 つひとつ解説するには誌面 ス名を指定します(図1)
.デフォルト値をそのまま使
が足りませんので,ここでは開発現場ですぐに使える うときは省略可能です.たとえば図1 の例ではポート
Tips を列挙し解説することにします. 番号5432を-pオプションで指定していますが,これは
デフォルト値ですのでほとんどの場合において省略で
psql きます.オプション省略時のデフォルト値は環境変数
∼対話型クライアント∼ の設定によっても変わってきます.psql --help でコマ
psql はPostgreSQL の端末型フロントエンド(クラ ンドオプションの解説と現在のデフォルト値が表示さ
イアント)で,データベースに接続して対話的に処理 れますので,それを参考にしてください.
を行うときに使用するツールです.システム開発時は データベースに接続されると入力プロンプトが表示
CREATE文によるスキーマ作成やシステムで使用する されますが(本特集ではweb_db=#)
,PostgreSQL の
クエリの実行確認などで使用し,システム運用時は保 設定(pg_hba.conf)によっては,パスワードの入力
守管理によく使用されます. が求められたり,接続が拒否されたりすることがあり
ます.クライアント側に問題がないと思われるときは,
サーバ側の設定を確認してください.
PostgreSQL の付属ツールを使い倒せ
psql,pg_dump,pg_restore,vacuumdb の Tips 集 04
を表示することができます.メタコマンドとはバック 図 4 SQL コマンドについての詳しいヘルプを表示
web_db=# \h SELECT
スラッシュ(または円記号)で始まる特別なコマンド Command: SELECT
Description: retrieve rows from a table or view
のことで,開発や管理に役に立つ便利なコマンドを簡 Syntax:
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
単に呼び出せるようになっています.メタコマンドの
...
一覧は,\?で表示できます.\h では,SQL コマンド
図 5 外部コマンドの実行
の一覧を表示できます.\h の後にSQL コマンドを指 web_db=# \! ls
output.dat test.sql
定することで,そのSQLコマンドに関する詳しいヘル
図 6 ファイルから SQL を実行
プを表示することができます(図4)
.
web_db=# \! cat test.sql
SELECT version()
外部コマンドの実行 web_db=# \i test.sql
version
-------------------------------------------------------------
psql のプロンプト上からOS の外部コマンドを実行 PostgreSQL 7.3.2 on i686-pc-linux-gnu, compiled by GCC 2.96
(1 row)
するには,\!メタコマンドを使います(図5)
.
図 7 実行結果をファイルに出力
web_db=# \o output.dat
ファイル入出力 web_db=# select version();
web_db=# \o
SQLをテキストファイルに書いておき,\iメタコマ web_db=# \! cat output.dat
version
ンドを使って読み込んで実行することができます(図 -------------------------------------------------------------
PostgreSQL 7.3.2 on i686-pc-linux-gnu, compiled by GCC 2.96
6)
. (1 row)
て同じSQLを何回も実行する場合などは便利です. web_db=# \l
List of databases
実行結果をファイルに出力するには\o メタコマン Name | Owner | Encoding
-----------+----------+----------
ドを使います.\o の後に出力したいファイル名を指 template0 | postgres | EUC_JP
template1 | postgres | EUC_JP
定すると,SQLの実行結果がそのファイルに出力され web_db | postgres | EUC_JP
(3 rows)
ます.\o だけを実行すると実行結果出力先が標準出
力(デフォルト)にリセットされますので,ファイル SELECT文を駆使すれば取得できますが,メタコマン
出力が済んだら\oだけを実行するとよいでしょう(図 ドを使えばもっと簡単に取得できます.一覧取得用と
7)
. して,データベースオブジェクトごとに以下のような
なお,\oで指定されたファイルは上書きされてしま メタコマンドが用意されています.
いますので気をつけてください.
¡\di :インデックス一覧表示
データベース一覧表示 ¡\ds :シーケンス一覧表示
¡\dt :テーブル一覧表示
psql コマンドで-l オプションを付けると,データベ
¡\dv :ビュー一覧表示
ース一覧を表示して終了します.psql ですでにデータ
¡\dS :システムテーブル一覧表示
ベースに接続しているときは,\l メタコマンドを実行
¡\du :ユーザ一覧表示
すると同じ出力が得られます(図8)
.
¡\df :ファンクション一覧表示
データベースオブジェクトの
¡\dT :型一覧表示
情報表示
\d系メタコマンドを使うことでデータベースオブジ テーブル,ビュー,インデックス,シーケンスにつ
ェクトに関する情報を簡単に取得できます.これらの いては,\d メタコマンドを使って詳細が表示できま
情報はPostgreSQL の内部で管理されているテーブル す.図9 はitem テーブルの詳細を表示した例です.
群(システムカタログ)に格納されていますので 単に\dと入力したときは\dtvsが実行されたものと
示されます.
テーブル⇔ファイル間の 引数には出力したいデータベース名を指定します.
データコピー デフォルトの出力先は標準出力ですので,ファイルと
\copy メタコマンドでは,テーブルとファイル間で して保存したいときはこの例のようにリダイレクト“>”
データをコピーできます.図10は,itemテーブルのデ を使って出力先をファイルに切り替える必要がありま
ータをitem.datファイルに出力します. す(-fオプションで指定する方法もあります)
.
このとき,item.datファイルはクライアント側(psql この方法でバックアップされたデータをリストア(シ
を実行したディレクトリ)に作成されるので注意して ステムの復元)するにはpsql コマンドを使います.
ください.出力ファイルのフォーマットは1行1レコー
% psql -d web_db -f web_db.dat
ドとなっています.カラムの区切り(デリミタ)は,
デフォルトではタブコードになっています.変更した pg_dumpはコマンド実行時のデータベースを再構築
いときはusing delimiters 句でデリミタ文字を指定し するようなSQL コマンドをプレーンテキストファイル
ます.たとえばデリミタ文字をカンマにしたいときは として出力しますので,psql コマンドの-f オプション
図11 のようになります. で保存ファイルを指定すれば簡単にリストアが行えま
逆にファイルからテーブルへデータを読み込みたい す.
ときはtoではなくfrom句を使います(図12)
.このと
圧縮しながらバックアップ
き,テーブルは事前に作成しておく必要があります.
pg_dumpの出力はプレーンテキストですので,圧縮
pg_dump & pg_restore することでファイル容量を大幅に小さくすることがで
∼バックアップとリストア∼ きます.
pg_dumpは,PostgreSQLデータベースをSQLスク
% pg_dump web_db | gzip > web_db.dat.gz
リプトファイルとして保存するためのツールです.バ
ックアップ用コマンドとしてよく利用されます. 圧縮済みファイルとして保存するのであれば,この
例のようにpg_dumpとgzipコマンドをパイプ“|”で
ノーマルなバックアップとリストア
繋げて実行するとよいでしょう.
pg_dumpはデータベースをSQLスクリプトとして出 この圧縮済みファイルをリストアするには,gzip と
力します. psql コマンドをパイプで繋げて実行します.
PostgreSQL の付属ツールを使い倒せ
psql,pg_dump,pg_restore,vacuumdb の Tips 集 04
¡tar アーカイブ ADD CONSTRAINT orderdata_pkey
¡カスタムアーカイブ
¡カスタムアーカイブ vacuumdb
% pg_restore -d web_db web_db.dat ∼運用段階での定期バキュームに∼
pg_restore では-d オプションでリストア先データベ vacuumdb はVACUUM コマンドのシェルスクリプ
ース名を指定し,末尾でバックアップファイル名を指 トラッパです.ソースコードを見てみるとわかります
定します. がvacuumdb はシェルスクリプトとなっていて,psql
を使ってVACUUM コマンドを実行しています.運用
スキーマだけを抽出
段階でVACUUM コマンドを定期的に実行する必要が
pg_dumpの-sオプションで,スキーマ(定義)だけ あるときはvacuumdbを使うとよいでしょう.
を抽出することができます. vacuumdb を定期的に実行するにはOS が提供して
いる機能を使うとよいでしょう.Linux などのUNIX
% pg_dump -s web_db > web_db.sql
系 OS ではcron を使います(cygwin でも使えます).
抽出したファイルを使ってスキーマを構築するには, たとえば午前5 時に全データベースに対しVACUUM
リストア時と同様psql を使います. を実行するには,下記エントリをcron に追加します.
-sオプションで抽出したスキーマ定義はCREATE文
などの羅列になっていますが,ユーザがスキーマ作成 まとめ
時に入力したCREATE文とまったく同じになっている
というわけではありません.たとえば,本特集で使用 この章ではPostgreSQL の付属ツールでよく利用さ
したスキーマ(第1章リスト1)ではCREATE TABLE れるものについて解説しました.これらのツールの熟
文内でPRIMARY KEY設定を行っていますが,-sオプ 練度によっても開発作業の進み具合が大幅に変わって
ションでの出力では下記のとおりALTER TABLE文で きますので,付属マニュアルなども参考にして的確な
追加する形になっています. 使い方が素早くできるようにしておきましょう.#