|
|
 |
|
IT技術情報
>データベース
>PostgreSQL 入門:PostgreSQL 有効活用術
|
|
 |
【連載 】PostgreSQL 入門
第2回:PostgreSQL 有効活用術
|
|
|
 |
【 ページ 】 | 1
| 2
| 3 | 4
| 5
|
<<前のページへ
|
 |
3.PostgreSQLの運用
3_1.バックアップ
データベースのバックアップは pg_dump というコマンドを使って行います。pg_dump
では、データベースの内容をテキスト形式にしていきます。実際には画面に表示されますので、
| |
 |
|
pg_dump dbname > /tmp/DBbackupfile |
|
 |
のような形でファイルに落としてやる必要があります。また、テキストのままではディスクの無駄遣いになるので、gzip
などのツールで圧縮するのが望ましいです。
バックアップした内容を復元(リストア)するには、psql コマンドを利用します。元のデータベースを
dropdb で削除しておき、
| |
 |
|
psql dbname < /tmp/DBbackupfile |
|
 |
とします。 |
3_2.VACUUM
PostgreSQL は、その構造上の理由から VACUUM という作業が必要です。これは、データベースの中のゴミをすべて削除するための作業です。
PostgreSQL では、DELETE された行は実際に消えているわけではなく、他から見えなくなっているだけです。UPDATE
に関しても、更新後の値を持つ行を INSERT してから、更新前の行を削除(したようにみえる状態に)しています。従って、DELETE
や UPDATE が大量に行われた場合、psql で一行しか存在しないように見える場合でも、実際は何十メガバイトものデータがある場合もあるのです。
そういったゴミデータを削除するのが VACUUM です。コマンドとしても用意されていますし(vacuumdb)、psql
から VACUUM とすることもできます。
VACUUM の処理をしている間、データベースに対する変更はできないようになります。VACUUM
にかかる時間は一概には言えませんが、一瞬で終わる場合もありますし、何時間単位でかかる場合もあります。前回
VACUUM をしてから DELETE/UPDATE された行数が多いほど VACUUM にかかる時間も長くなります。頻繁に
VACUUM をしたほうがデータベースを更新できない時間が短くなりますので、運用上は望ましいといえます。
|
3_3.データのインポート/エクスポート(copy を使った方法)
psql のプロンプトから、copy という SQL を発行することにより、データベース内のデータだけ(pg_dump は、データベースの構造も含まれています)をファイルに落とすことができます。
| |
 |
|
COPY tablename TO '/tmp/datafile'; |
|
 |
これで、/tmp/datafile にデータが書き出されます。標準ではタブ区切りテキストになりますが、DELIMITERS
を指定することで、区切り文字を指定することができます。
COPY で書き出されたファイルをテーブルに INSERT するには、
| |
 |
|
COPY tablename FROM '/tmp/datafile'; |
|
 |
とします。ファイルの形式に合わせて DELIMITERS を指定しなければなりません。省略時はタブです。
|
3_4.データベースファイルの生成場所
データベースのデータは、デフォルトで /usr/local/pgsql/data/base/
以下にファイルとして作成されます。通常の利用だとこれで問題はないのですが、大規模なデータベースの場合、ディスク領域が足りなくなることが懸念されます。そういった場合、大容量のパーティションにデータを配置すれば、問題は回避できます。
方法ですが、シンボリックリンクという機構を使います。シンボリックリンクを用いると、ファイルやディレクトリへのリンクを、実体とは別のところに配置することが可能になります。例えば、/tmp/hoge
というファイルがあったとして、/home/hoge/link に /tmp/hoge へのシンボリックリンクを作れば、cat
/home/hoge/link とすれば、/tmp/hoge の内容が表示されるようになります。
シンボリックリンクを作るためのコマンドは ln (エルエヌ)です。上記の例の場合だと
| |
 |
|
ln -s /tmp/hoge /home/hoge/link |
|
 |
のように、-s オプションをつけて、実体、リンクの名前 という順番で記述します。
PostgreSQL のデータを他の場所に移す場合の説明をします。データは /usr/local/pgsql/data/base/
の下にデータベース名のディレクトリが作られていて、その中にすべてのファイルが存在します。ですから、まずそのディレクトリを希望の位置に移動させます。その後、/usr/local/pgsql/data/base
の下にデータベース名と同じ名前のシンボリックリンクを作ります。
上記の処理はデータベースの運用が始まる前に行うべきなのですが、運用中にしなければならないときは、postmaster
をとめて、データベースへのアクセスが無い状態にしてから移動作業を行います。
| |
 |
pg_ctl stop
mv /usr/local/pgsql/data/base/yourdbname /ext/dbdir/
ln -s /ext/dbdir/yourdbname /usr/local/pgsql/data/base/yourdbname |
|
 |
yourdbname はデータベース名です。最後に postmaster を起動して完了です。 |
>>次のページへ
|
 |
|
 |
【 関連記事 】
|
|
 |
 |
|
サイト内全文検索 |
| スタックアスタリスクのサイトを検索します。検索には、Googleを利用しています。そのため、最新の情報で検索されない可能性があります。 |
|