PostgreSQLを使う

PostgreSQLは信頼性の高いRDBMSで、かなり大きなシステムにおいても、十分対応できる性能を持つ。一つのDBの大きさは無制限(但し1パーティションまたはOSのファイルサイズ上限まで)、1つのテーブルの大きさは42TBまで、一つのテーブルの行数やインデックス数は42億まで・・・と、不足のないスペックとなっている。機能的にも、トランザクションをサポートしており、本格運用が可能である。

PostgreSQL のインストール
PostgreSQLの設定
ユーザーとパスワード
DB の作成



PostgreSQL のインストール

まずは apt-get コマンドでインストール。

# apt-get install postgresql

下記のメッセージが表示される。「libpgsql2」と「postgresql-client」も一緒に導入されることが分かる。

Reading Package Lists... Done
Building Dependency Tree... Done
The following extra packages will be installed:
  libpgsql2 postgresql-client
The following NEW packages will be installed:
  libpgsql2 postgresql postgresql-client
0 packages upgraded, 3 newly installed, 0 to remove and 0  not upgraded.
Need to get 1896kB of archives. After unpacking 4731kB will be used.
Do you want to continue? [Y/n]

「Y」または単にEnterキーを押す。

インストールが進むと、パッケージの初期設定画面となる。
まずは言語設定。

PostgreSQL databases can be created with any one of a number of
different character encodings.  Please choose the default encoding, which
will be used for all newly-created databases in the absence of a specific
encoding specification.  The choices are:

        SQL_ASCII       ASCII
        EUC_JP          Japanese EUC
        EUC_CN          Chinese EUC
        EUC_KR          Korean EUC
        EUC_TW          Taiwan EUC
        UNICODE         Unicode(UTF-8)
        MULE_INTERNAL   Mule internal
        LATIN1          ISO 8859-1 English and some European languages
        LATIN2          ISO 8859-2 English and some European languages
        LATIN3          ISO 8859-3 English and some European languages
        LATIN4          ISO 8859-4 English and some European languages
        LATIN5          ISO 8859-5 English and some European languages
        LATIN6          ISO 8859-10 ECMA-144 Latin Alphabet No.6
        LATIN7          ISO 8859-13 Latin Alphabet No.7
        LATIN8          ISO 8859-14 Latin Alphabet No.8
        LATIN9          ISO 8859-15 Latin Alphabet No.9
        LATIN10         ISO 8859-16 ASRO SR 14111 Latin Alphabet No.10
        ISO-8859-5      ECMA-113 Latin/Cyrillic
        ISO-8859-6      ECMA-114 Latin/Arabic
        ISO-8859-7      ECMA-118 Latin/Greek
        ISO-8859-8      ECMA-121 Latin/Hebrew
        KOI8            KOI8-R
        WIN             Windows CP1251
        ALT             Windows CP866

Enter default encoding (SQL_ASCII):EUC_JP

通常はEUC_JPでよいだろう。ここでEUC_JPを選んでも、作成するDBごとに文字コードの指定ができるので、とりあえずは標準的な言語設定をしておくのが無難である。

すると今度はシステムのロケールを聞いてくる。

You need to specify the locale under which the postmaster will run.
(This mainly affects the sorting of text. Use of any locale but C
will reduce the efficiency of index access; however, it will also
force sorting by ASCII code rather than by national collating order.)

You have the following locales enabled in your system:
en_US en_US.utf8 ja_JP.eucjp ja_JP.utf8

Select locale [C]:ja_JP.eucjp

もちろんja_JP.eucjpを入力し、Enter。

いくらかのメッセージが流れた最後に、postmasterが起動され、template1という名のデータベースが作成されたことが示されてプロンプトに戻る。これでインストール完了だ。


△top

PostgreSQLの設定

設定ファイルは/etc/postgresqlにある。RedHat系のディストリビューションでは設定ファイルは/var/lib/pgsql/data だったと思うが、Debian GNU/Linux は、FHS(Filesystem Hierarchy Standard)に従った配置で /etc/アプリ名 になっている。最初は違和感があるかもしれないが、ほかのアプリの設定ファイルは、どれも/etcのソフト名のディレクトリ下にあることを考えれば、debianのファイルの位置の方が一貫性があってしっくり来ると思う。ま、それでも /var/lib/postgres/dataにも上記設定ファイルのエイリアスが作成されている。

最低限記述する必要のあるファイルは、postgresql.conf と pg_hba.conf の二つである。

まずは postgresql.conf を見てほしい。ネットワーク越しに接続を許可するためには下記の点を確認または編集する

tcpip_socket = 1
port = 5432

tcpip_socket の値は、on とか true でもいい。0 だと外部からの接続は一切受け付けない。
port はデフォルトで5432なので、指定がなくても大丈夫だが念のため。

次に pg_hba.conf 。hba とは Host Base Authentification のことである。認証によってセキュリティを確保するには必須といえる。pg_hba.conf では下記のようにポリシーを設定できる。

local        all                                           password
host         all         0.0.0.0       0.0.0.0             password

このように設定すると、次のようにパスワードをつけたユーザーのみが認証され、接続できる形となる。


△top

ユーザーとパスワード

データベースユーザーを作成する前に覚えておきたいのは、PostgreSQLにおけるスーパーユーザーが、「postgres」であることだ。だからDBを作成するにあたり、このユーザーがpsqlというDB用のターミナルから各種作業をできるようにしなければならない。手っ取り早いのは、rootがpostgresユーザーのUNIXのログインをできるようにシステムパスワードを設定し、下記の作業に入ることだ。

まずユーザーpostgresになってpsqlを起動する。

# su - postgres
$ createdb test
$ psql test

上記では、suコマンドでユーザー postgres になり、test という名のデータベースを作成し、そのDBを指定してPostgeSQLのターミナルを起動している。

すると次のようなプロンプト表示になる。

Password:
Welcome to psql, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help on internal slash commands
       \g or terminate with semicolon to execute query
       \q to quit
test=#

ユーザーの追加とパスワードの設定は次のようにする。

test=# create user user_name with password 'xxxxxxx';

設定済みのユーザーのパスワード変更は次のようにする。ここでpostgres自身のパスワードを設定してもよい。

test=# alter user user_name with password 'xxxxxxx';

ちなみに、

test=# update pg_shadow set passwd='xxxxxxx' where usename='user_name';

と設定すると、暗号化パスワード認証に対応し、pg_hba.confの password の部分をcrypt とし、よりセキュアな設定ができる。

本来 www の接続だけならローカル接続の設定だけでいいわけだが、CSEのような管理ツールからDBをさわる場合には外部からの接続も定義する必要がある。もちろんすべての端末からアクセス可能な状態を提供する必要もないので、pg_hba.confに接続可能なIPアドレスを指定し、接続できる端末もしくはネットワークを限定することが望ましい。


△top

DB の作成

基本的な設定が済んだら、実際に簡単な DB を作成してみよう。まず cratedb コマンドでDBを作成。

$ createdb test

DBを作成したら、そこにデータを追加する。psql を起動し、プロンプトから下記のSQL文を実行する。

create table items(
   item_id    int4,
   item_name  varchar(20),
   model_no   varchar(20),
   cost       numeric(10,2),
   primary key ( item_id )
);

insert into items values(101,'デスクトップPC','DTPC001',150000);
insert into items values(102,'ノートPC','NTPC001',250000);
insert into items values(103,'液晶ディスプレイ','LCD001',50000);
insert into items values(104,'レーザープリンタ','LZPRT001',300000);
insert into items values(105,'インクジェットプリンタ','IJPRT001',30000);
insert into items values(106,'スイッチングHUB','SWHUB001',10000);
insert into items values(107,'ブロードバンドルータ','BBLT001',20000);
insert into items values(108,'キーボード','KBD001',5000);
insert into items values(109,'マウス','MUS001',2000);
insert into items values(110,'LANケーブル','LCB001',1500);

CSEpsqledit などのツールを使うとたくさんのSQL文を一括実行できるので、DBをメンテするには大変重宝する。ただここでは個々のツールの使用法には触れない。各ツールのドキュメントやサポートページの情報を参照し、使いこなしてほしい。

データが登録できたら、 select 文を使って登録したデータを表示させてみる。

test =# select * from items;

 item_id |       item_name        | model_no |   cost
---------+------------------------+----------+-----------
     101 | デスクトップPC         | DTPC001  | 150000.00
     102 | ノートPC               | NTPC001  | 250000.00
     103 | 液晶ディスプレイ       | LCD001   |  50000.00
     104 | レーザープリンタ       | LZPRT001 | 300000.00
     105 | インクジェットプリンタ | IJPRT001 |  30000.00
     106 | スイッチングHUB        | SWHUB001 |  10000.00
     107 | ブロードバンドルータ   | BBLT001  |  20000.00
     108 | キーボード             | KBD001   |   5000.00
     109 | マウス                 | MUS001   |   2000.00
     110 | LANケーブル            | LCB001   |   1500.00
(10 rows)

以上のように表示されればOKだ。

最後に。DBの管理やSQLについては、なにか分厚い書籍を購入して、じっくり腰を据えて、一通り学んでみることをおすすめする。上記のような設定までできてしまえば、思う存分DBを学ぶ環境を持つことができるだろう。


△top