24.5. PostgreSQLの基本操作

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

24.5.1. データベースユーザーの作成

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

最初に、postgres ユーザーでシステムにログインします。そして、データベースユーザーを登録するために、createuser コマンドを使用します。

$ createuser
Enter name of user to add: taro
Shall the new user be allowed to create databases? (y/n) y
Shall the new user be allowed to create more new users? (y/n) n
CREATE USER

コマンドを実行すると、登録するデータベースユーザー名を問われます。通常は、Linux システムにアカウントを持つ一般ユーザーのユーザー名を入力します。この例では、taro というユーザーを入力しています。次に、登録するデータベースユーザーにデータベースの作成権限を与えるかどうかを問われます。y を入力し権限を与えます。最後に、このデータベースユーザーに PostgreSQL の新規ユーザーを作成する権限を与えるかどうかを問われます。 y を選択すると PostgreSQL のスーパーユーザー(postgres)と同じ権限となりますので、通常は n を選択します。これで、作成したデータベースユーザーで、PostgreSQL を利用できるようになります。

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

$ dropuser taro

24.5.2. データベースの作成

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

$ createdb -E EUC_JP testdb
CREATE DATABASE

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

24.5.3. psql の基本操作

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

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

$ psql -U taro testdb

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

Password:

注意

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

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

$ psql -U taro testdb
Password:
Welcome to psql 7.4.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 で使用できる代表的なコマンドです。

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

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

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

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

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

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

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

表 24-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 137640 1
testdb=# insert into meibo values ('Hanako Tanaka',18,'3-4-x Yokohama-shi Kanagawa');
INSERT 137641 1
testdb=# insert into meibo values ('Ichiro Suzuki',35,'5-6-x Saitama-shi Saitama');
INSERT 137642 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 テーブルが削除されます。なお、当然のことながらテーブルに追加したデータも削除されます。