このページでは、BSDライセンスにより配布されているフリーのデータベース管理システム「PostgreSQL」のバージョン8.xをFreeBSD上で構築、利用する方法について説明します。
postgresql8はデフォルトでシステムにインストールされていませんので、別途システムにインストールする必要があります。
インストールはportsを利用して行います。
portsの取得および展開方法については、「最新のportsを取得して展開する」を参照してください。
portsの展開が完了した後、下記手順でpostgresql8をmakeし、インストールします。
$ cd /usr/ports/databases/postgresql84-server $ make config-recursive $ make install clean
postgresql7以前では、ビルド時にマルチバイト系のコンパイルオプションを付与する必要がありましたが、postgresql8では、DBクラスタの初期化時にエンコードとロケールを指定するように変更されています。
このため、特にコンパイルオプション等を指定する必要はありません。
上記の例では、「PostgreSQL 8.4.x」を構築しますが、FreeBSDのportsには、古いバージョンのpostgresql8も含まれていますので、古いバージョンのpostgresql8を導入したい場合には、「/usr/ports/database」下の他の「postgresql8?-server」を利用してください。
DBクラスタの初期化を行います。
postgresql8をFreeBSDのportsからインストールすると、PostgreSQL用のアカウント「pgsql」があらかじめ用意されています。
rootから以下のように入力してください。
$ su pgsql $ cd /usr/local/pgsql/ $ mkdir data $ initdb -D ./data --encoding=utf-8 --lc-collate=C
「/usr/local/pgsql」下にDBクラスタ用フォルダが作成されます。(以降、DBが追加されるたびに、このフォルダ以下にデータが格納されていきます。)
jail等で1つのシステム上に複数のpostgresql8を動作しているような場合、上記の手順において「initdb could not create semaphores」と表示され、DBクラスタ用フォルダが作成されない場合があります。
これは、システムで用意しているセマフォの上限値より多いセマフォが要求されたために発生します。
このエラーが発生した場合には、「/boot/loader.conf」に以下の記述を追加し、セマフォの上限値を増やしてください。
kern.ipc.semmni=50 kern.ipc.semmns=300 kern.ipc.semmnu=150
上記の例では、FreeBSD 6.3の規定値の5倍の容量を確保しています。
これらの値の設定値は「sysctl -a | grep kern.ipc」で確認できます。
最後に、システムの起動時にpostgresql8が自動的に起動するよう、「/etc/rc.conf」に下記の記述を追記します。
postgresql_enable="YES" postgresql_flags="-w -s -m fast" postgresql_initdb_flags="--encoding=utf-8 --lc-collate=C" postgresql_class="default"
この設定により、システム再起動時にpostgresql8が自動的に起動するようになります。
ここまでは、postgresql8を通常の環境で利用する場合の設定方法について説明してきましたが、FreeBSDのjail環境でpostgresql8を構築するには、これに加えて若干の設定を追加で行う必要があります。
詳しくは「FreeBSDサーバ上に仮想サーバを構築する(jail):: prisonerでPostgreSQLを動作させる際の注意点」をご確認ください。
以下にpostgresql8でのDBに対する基本的な操作を説明します。
ROLEは、postgresql8の各種操作を行うための権限のようなもので、ユーザごとに設定されます。
ユーザ「dbuser」にROLEを付与するには、「createuser」を利用します。
$ createuser dbuser
いくつかの設問が表示されますので、適宜回答してください。
既存のROLEを削除するには、「dropuser」を利用します。
$ dropuser dbuser
postgresql8でDBを新規に作成するには、「createdb」を利用します。
「createdb」を実行するには、ユーザがpgsqlか、または予めROLEが登録されたユーザである必要があります。
$ createdb test_db
postgresql8で既存のDBを削除するには、「dropdb」を利用します。
「dropdb」を実行するには、ユーザがpgsqlか、または予めROLEが登録されたユーザである必要があります。
$ dropdb test_db
既存のDBを一覧表示するには、下記のようにします。
$ psql -l
ファイル内に記述されたSQL文をバッチで実行するには、下記のようにします。
$ psql -f test.sql test_db
「test.sql」の部分には、SQL文が書かれたテキストファイル名を、「test_db」の部分には、対象となるDB名を指定してください。
psqlのコマンドプロンプトを利用してSQL文を入力したい場合には、以下のようにします。
$ psql test_db
DBに保存されているデータを丸ごとバックアップするには、「pg_dump」を利用します。
$ pg_dump db_name -b -o -Fc -f target.dump
DBごとではなく、すべてのDBを丸ごとバックアップするには、「pg_dumpall」を利用します。
$ pg_dumpall -b -o -Fc -f target.dump
「pg_dump」によってバックアップされたデータを復元するには、「pg_restore」を利用します。
「pg_dump」で出力されたダンプデータは、全てのプラットフォームで共通に利用できるため、DBの内容を別の環境に移行する場合にも利用できます。
$ pg_restore -d db_name -c target.dump
ここでは、データベースのパフォーマンスチューニングに関する設定について、説明します。
OSのシェアドメモリを増やすことにより、postgresql8のパフォーマンスを向上させることが可能です。
「/etc/sysctl.conf」に以下の記述を追加すると、シェアドメモリを256MBに拡張することが出来ます。
kern.ipc.shmall=65536 kern.ipc.shmmax=268435456
FreeBSDでは「kern.ipc.shmall」がページ数(1ページ=4KB)、「kern.ipc.shmmax」がバイト数になっています。
値を増減させる場合には、「kern.ipc.shmmax」=「kern.ipc.shmall」×4096となるように設定してください。
PostgreSQL8.1.x未満のインストール直後には、標準出力に下記のようなメッセージが表示されることがあります。
WARNING: autovacuum not started because of misconfiguration HINT: Enable options "stats_start_collector" and "stats_row_level".
これは、PostgreSQL8.1.x以降でサーバに統合されたautovacuum(データベースの利用頻度に応じて自動的にvacuumをかける)機能がONになっているものの、autovacuumの実行に必要な各種統計情報が収集できない設定になっているために表示されるものです。
autovacuumを利用することにより、定期的な保守メンテナンスがなくとも、DBを一定のパフォーマンスのまま維持することができますが、その一方でDBアクセス時に各種統計情報を収集するため、トランザクションあたりの性能が低下します。
autovacuumを利用する場合には、「/usr/local/pgsql/data/postgresql.conf」内に以下の通り設定してください。
stats_start_collector = on stats_row_level = on autovacuum = on
逆に、autovacuumを利用しない場合には、「/usr/local/pgsql/data/postgresql.conf」内に以下の通り設定してください。
stats_start_collector = off stats_row_level = off autovacuum = off
・postgresql8をjail上で利用する場合の注意点について、リンクを追加。
・「pg_dumpall」を使った全DBの一括バックアップの方法を追記。
・頂いたメッセージは管理者のチェックの後、公開されます。
・メッセージの公開を希望されない場合には、「このメッセージを非公開にする」にチェックを入れてください。
・管理者が不適切と判断したメッセージは公開しませんので、予めご了承ください。
まだ評価がありません |
表示できるメッセージはありません。