PostgreSQLはソースコードをコンパイルして簡単にインストール可能だ。今回はインストールから初期化、そしてコマンドラインツール「psql」を利用してデータを追加する手順について解説する。
PostgreSQLは、LinuxやFreeBSDおよび一部の商用UNIXでは、パッケージシステムを用いて簡単にインストールすることも可能です。ただしRedHat系のLinux(RedHatやTurbo Linux、Vine Linuxなど)では、/usr直下のディレクトリ(/usr/binや/usr/lib)にファイルが配置されて、後でメンテナンスする場合などに少し戸惑いを感じるかもしれません(単に筆者だけかもしれませんが^^;;)。
そういうときは、ぜひともPostgreSQLをソースコードからコンパイルしましょう。その手順を紹介します。
まず、日本のPostgreSQLオフィシャルミラーサイト(jaist.ac.jp)などからPostgreSQLのソースファイルを入手します。
ftp://ftp.jaist.ac.jp/pub/dbms/PostgreSQL/source/
次に、PostgreSQL管理用専用ユーザー「postgres」を、useraddコマンドなどで作成します。これはroot権限で行います。
# useradd -g users postgres
ユーザーpostgresに、以下の環境変数をセットします(標準シェルとしてbashを使用している場合、.bash_profileに記述。ほかの環境の場合、適宜読み替える)。環境変数をセットしたら、sourceコマンドで反映するか一度ログアウトしログインし直して環境変数を反映します。
[bashの場合] export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=$POSTGRES_HOME/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
ソースを展開し、以下configure、make、make installを行ってコンパイルとインストールを行います。
$ cd /usr/local/src/ $ tar xvzf /path/to/postgresql-7.0.tar.gz $ cd postgresql-7.0/src $ ./configure --with-multibyte=EUC_JP $ make $ su $ make install
なお、パッチを適用する場合、例えば、堀田@諫早市さんが作成されたpsqlj(psqlを日本語化したもの)などを導入する場合、ソースを展開したときにパッチを適用しておきます。
上記のコマンドを実行した状態では、PostgreSQLが/usr/local/pgsql以下にインストールされます。
PostgreSQLをインストールしたら、最初に一度だけ以下のコマンドで初期化を行う必要があります(パッケージからインストールした場合も同様)。
$ initdb
初期化を行ったら、データベースを作成してみましょう。ただし、この処理を行う前にpostmasterを起動しておく必要があります。次のようにして、デーモンモードで起動しておきましょう。
$ postmaster -S -i
オプション“-S”はpostmasterをデーモンモードで起動することを意味します。
オプション“-i”はインターネットソケットを使用することを意味します。
データベース作成コマンドは以下のとおりです。
$ createdb [データベース名]
ここから先は、PostgreSQLを操作する専用のコマンドラインツール「psql」を使います。psqlを使うと、データベースの内容を参照したり、SQL文を実行したりすることができます。
では、実際にpsqlを起動してみましょう。
$ psql [データベース名]
データベース名は、ユーザー名と同一名称を付けた場合、psqlでは省略してオープンすることが可能です。psqlを起動すると、次のようなメッセージが表示されるはずです。
Welcome to the POSTGRESQL interactive sql monitor: Please read the file COPYRIGHT for copyright terms of POSTGRESQL [PostgreSQL 6.5.3 on i686-pc-linux-gnu, compiled by gcc 2.95.2] type \? for help on slash commands type \q to quit type \g or terminate with semicolon to execute query You are currently connected to the database: postgres postgres=>
postgres=> の部分がpsqlのプロンプトとなります。
psqlのコマンドラインから操作して、どんなデータベースオブジェクトがあるか表示してみましょう。
postgres=> \d Couldn't find any tables, sequences or indices!
上記のメッセージが出た場合、データベース内にオブジェクトは存在しません。データベース作成直後なので当然のことです。では、テーブルを作成してみましょう。
postgres=> create table test ( shainno int,shimei text); CREATE
テーブルtestが作成されました。もし、intなどのスペルを間違った場合などは以下のメッセージが表示されて、テーブル作成に失敗してしまいます。
postgres=> create table test ( shainno number,shimei text); ERROR: Unable to locate type name 'number' in catalog
エラーが出なければ、テーブルが作成されたかどうか確認してみましょう。
postgres=> \d Database = postgres +------------------+----------------------------------+----------+ | Owner | Relation | Type | +------------------+----------------------------------+----------+ | postgres | test | table | +------------------+----------------------------------+----------+
上記のような表示がされれば、テーブルtestが作成されたことが確認できます。
テーブルのカラム定義を確認する場合、“\d [テーブル名]”のようにコマンドを入力します。
postgres=> \d test Table = test +--------------------------+--------------------------+-------+ | Field | Type | Length| +--------------------------+--------------------------+-------+ | shainno | int4 | 4 | | shimei | text | var | +--------------------------+--------------------------+-------+
では、作成したテーブルに値を入力して表示させることにしましょう。
前回も書いたとおり、PostgreSQLではSQL92のサブセットに準拠したSQLが使用できます。データの追加を行うコマンドは“insert”です。
postgres=> insert into test (shainno,shimei) values (1,'munetika'); INSERT 18506 1
追加に成功した場合、上記のようなメッセージが表示されます。失敗した場合は、以下のようなメッセージとなります。
postgres=> insert into test (shainno,shimei) values (1,munetika); ERROR: Attribute munetika not found
追加したデータの表示は、“select”コマンドを使用します。
postgres=> select * from test; shainno|shimei -------+-------- 1|munetika (1 row)
表示に失敗した場合、以下のようなメッセージが表示されます。
postgres=> select * from tests; ERROR: tests: Table does not exist.
最後にpsqlを終了しましょう。終了のコマンドは“\q”です。
postgres=> \q [postgres@micky pgsql]$
上記のようにOSのプロンプトが表示され、psqlは終了します。
psqlで使えるコマンドを確認したい場合、“\?”コマンドを使用します。ここでは、そのとき表示される内容を示しておきます。
postgres=> \? \? -- help \a -- toggle field-alignment (currently on) \C [<captn>] -- set html3 caption (currently '') \connect <dbname|-> <user> -- connect to new database (currently 'postgres') \copy table {from | to} <fname> \d [<table>] -- list tables and indices, columns in <table>, or * for all \da -- list aggregates \dd [<object>]- list comment for table, field, type, function, or operator. \df -- list functions \di -- list only indices \do -- list operators \ds -- list only sequences \dS -- list system tables and indexes \dt -- list only tables \dT -- list types \e [<fname>] -- edit the current query buffer or <fname> \E [<fname>] -- edit the current query buffer or <fname>, and execute \f [<sep>] -- change field separater (currently '|') \g [<fname>] [|<cmd>] -- send query to backend [and results in <fname> or pipe] \h [<cmd>] -- help on syntax of sql commands, * for all commands \H -- toggle html3 output (currently off) \i <fname> -- read and execute queries from filename \l -- list all databases \m -- toggle monitor-like table display (currently off) \o [<fname>] [|<cmd>] -- send all query results to stdout, <fname>, or pipe \p -- print the current query buffer \q -- quit \r -- reset(clear) the query buffer \s [<fname>] -- print history or save it in <fname> \t -- toggle table headings and row count (currently on) \T [<html>] -- set html3.0 <table ...> options (currently '') \x -- toggle expanded output (currently off) \w <fname> -- output current buffer to a file \z -- list current grant/revoke permissions \! [<cmd>] -- shell escape or command
次回は、実際にPostgreSQLを使用しての、アプリケーション開発(C言語やPHP)について解説したいと思います。
Copyright © ITmedia, Inc. All Rights Reserved.