25.5. PostgreSQLの基本操作

ここでは、PostgreSQL でデータベースを作成し、テーブルにデータを追加するまでの手順を簡単な例をとおして解説します。PostgreSQL 8.2 からはデータベースユーザーではなくデータベースロールという概念が取り入れられています。新規データベースロールの登録やデータベースの作成等、PostgreSQL に関する詳細な情報は、PostgreSQL オフィシャルマニュアルを参照してください。

25.5.1. ロールの作成

Turbolinux 11 Server では、postgres ユーザーが PostgreSQL の管理権限を持つロールとなり、postgres 以外の Linux ユーザーは、インストール直後の PostgreSQL を使用することはできません。よって、Linux システムにアカウントを持つユーザーが PostgreSQL を使用できるように、必要に応じてデータベースロールを登録する必要があります。

最初に、postgres ユーザーでシステムにログインします。そして、データベースロールを登録するために、createuser コマンドを使用します。-P オプションを指定すると パスワードを設定が可能になります。

$ createuser -P
Enter name of role to add: taro
Enter password for new role:secret
Enter it again:secret
Shall the new role be a superuser? (y/n)n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE

コマンドを実行すると、登録するデータベースロール名を問われます。通常は、Linux システムにアカウントを持つ一般ユーザーのユーザー名を入力します。この例では、taro というユーザーを入力しています。次に、-P オプションを指定した場合は、パスワードの入力があります。確認のため 2 回入力します。続いて登録するデータベースロールにスーパーユーザー権限を与えるかどうかを問われます。スーパーユーザー権限を持つと一切の権限検査をパスしてしまい危険です。本当に必要な場合にのみ付与してください。ここでは、n を入力して権限を与えません。続いてデータベースの作成権限を与えるかどうかを問われます。y を入力し権限を与えます。最後に、このデータベースロールに PostgreSQL の新規ロールを作成する権限を与えるかどうかを問われます。 y を選択するとスーパーユーザーに対する権限変更以外は、スーパーユーザーと同等の権限となりますので、通常は n を選択します。これで、作成したデータベースロールで、PostgreSQL を利用できるようになります。

なお、登録したデータベースロールを削除するには、dropuser コマンドを使用します。

$ dropuser taro
DROP ROLE

ティップ

Turbolinux 11 Server postgreSQL の初期状態では、データベースに接続する際に指定するデータベースロール名と実際にコマンドを実行している Linux 一般ユーザー名が等しいかどうかのチェックを行っています。新規作成するデータベースロール名には、Linux システムにアカウントを持つ一般ユーザー名を入力します。

25.5.2. データベースの作成

データベースを作成するには、createdb コマンドを実行します。データベースロールの作成時にデータベースの作成権限を与えたロールだけが、データベースを作成できることに注意してください。単に、createdb を実行すると、自分のロール名と同じ名前のデータベースができます。他のデータベース名にするには、引数で作成するデータベース名を指定します。また、データベースで日本語を扱うために使用する文字コードを指定することを推奨します。以下の例では、日本語 EUC コードでデータベースを作成しています。

$ createdb -E EUC_JP testdb
CREATE DATABASE

これにより、testdb という日本語を EUC で管理するデータベースが作成されます。次に作成したデータベースへテーブルを作成し、データを挿入します。これらの操作を行えるツールには、さまざまなものがありますが、以下では、PostgreSQL に標準で付属する psql を使用します。

25.5.3. psql の基本操作

PostgreSQL には、psql というクライアントアプリケーション(データベース操作ツール)が標準で付属しています。作成したデータベースへ接続し、SQL文の実行とその結果を表示することが可能です。psql の詳細な使用方法については、PostgreSQL オフィシャルマニュアルを参照してください。

作成した testdb データベースへ接続するには、次のコマンドを実行します。この例では、ローカルホストから Linux の一般ユーザー taro になってデータベースロール taro を使用し、testdb データベースに接続します。リモートホストから接続する場合はデータベースが存在するホストを -h hostname オプションで指定します。

$ psql -U taro testdb

-U オプションを指定しない場合は、現在ログインしているシステムユーザー名でデータベースへの接続を試みます。また、データベース名を指定しなかった場合は、ロール名と同じ名前のデータベースへ接続を試みます。データベースの接続に認証を行うように設定している場合は、パスワードの入力を求められます。

Password:

注意

標準設定では、データベースユーザーのパスワードは設定されていません。また、データベースへのローカルホストからの接続はすべてのデータベースロールに許可されています。しかし、実際の運用ではパスワードによる認証を行うことを推奨します。パスワードの設定、および認証に関する詳細は、PostgreSQL オフィシャルマニュアルを参照してください。

接続すると以下のように、プロンプトが接続したデータベース名になります。これが、SQL 文を実行するためのコマンドプロンプトとなります。

$ psql -U taro testdb
Password:
Welcome to psql 8.2.5, 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

testdb=#

SQL 文以外にも、psql へ命令を与えることができます。先頭がバックスラッシュ \ の文は SQL 文ではなく、psql に対する命令と解釈されます。例えば、\q は psql を終了するための命令です。また、\? は、psql へ与えることができる命令のヘルプを表示します。

psqlを終了するには、次のコマンドを実行します。

testdb=# \q

以下は、psql で使用できる代表的なコマンドです。

表 25-2. psql 主なバックスラッシュコマンド

コマンド説明
\?バックスラッシュコマンドのヘルプを表示します。
\h利用可能なSQL文を表示します。\h command と実行すれば、その SQLコマンドの書式を表示します。
\i他のファイルを取り込みます。一連のSQL文を、事前にファイルに記述しておき、\i filename と実行することで、一度に SQL文を実行することができます。
\d\d pattern と実行すれば、マッチするテーブル、ビュー、インデックス、シーケンスに関する属性を表示します。
\dTデータ型の一覧を表示します。
\encodingクライアントの現在の文字コードを表示します。\encoding encoding と実行すれば、クライアントの文字コードを設定します。
\lデータベースの一覧を表示します。
\zテーブル、ビュー、シーケンスの一覧をアクセス権限とともに表示します。
\qpsql を終了します。

25.5.3.1. テーブル作成とデータの追加

testdb データベースにデータを格納するためのテーブルを作成します。ここでは、例として以下の簡単なテーブルを作成します。

表 25-3. meibo テーブルの仕様

カラム名データ型説明
namevarchar(30)半角30文字までの可変長文字列
ageinteger整数
addressvarchar(80)半角80文字までの可変長文字列

meibo デーブルへ格納するデータは以下の通りです。

表 25-4. meibo テーブルのデータ

nameageaddress
Taro Yamada271-2-x Shibuya-ku Tokyo
Hanako Tanaka183-4-x Yokohama-shi Kanagawa
Ichiro Suzuki355-6-x Saitama-shi Saitama

テーブルの作成は SQLの CREATE TABLE 文を使用します。SQL 文は、最後はセミコロン ; で終了します。その間は改行しても構いません。

testdb=# create table meibo (
testdb(#     name     varchar(30),
testdb(#     age      integer,
testdb(#     address  varchar(80));
CREATE TABLE
testdb=>

新規作成した meibo テーブルにデータを追加します。データの追加は SQL 文の INSERT INTO を使用します。

testdb=# insert into meibo values ('Taro Yamada',27,'1-2-x Shibuya-ku Tokyo');
INSERT 0 1
testdb=# insert into meibo values ('Hanako Tanaka',18,'3-4-x Yokohama-shi Kanagawa');
INSERT 0 1
testdb=# insert into meibo values ('Ichiro Suzuki',35,'5-6-x Saitama-shi Saitama');
INSERT 0 1

テーブルに追加したデータの表示は SQL の SELECT 文を使用します。

testdb=# select * from meibo;
     name      | age |        address
---------------+-----+------------------------
 Taro Yamada   |  27 | 1-2-x Shibuya-ku Tokyo
 Hanako Tanaka |  18 | 3-4-x Yokohama-shi Kanagawa
 Ichiro Suzuki |  35 | 5-6-x Saitama-shi Saitama
(3 rows)

作成したテーブルを削除したい場合は、SQL 文の DROP TABLE を使用します。

testdb=# drop table meibo;
DROP TABLE

これで、meibo テーブルが削除されます。なお、当然のことながらテーブルに追加したデータも削除されます。