PostgreSQL 簡易チュートリアル

目次

PostgreSQL 簡易チュートリアル

■ PostgreSQLとは

本授業では、RDBMSとしてPostgreSQLを使用する。

PostgreSQLとはRDBMSの1つであり、 オープンソース・ソフトウェアとして提供される データベース管理システム(DBMS)である。 1970年代に、カリフォルニア大学バークレー校で ストーンブレーカー教授らを中心として開発が進められたDBMSである Ingresにルーツを持ち、その後、Postgres、Postgres95と発展し、 現在のPostgreSQLに至る。 PostgreSQLでは、RDBMSとしてSQL92/SQL99に準拠した問い合わせを行うことが出来る。

PostgreSQLは、データベース問い合わせ処理速度などの性能の点で、 他のRDBMSと比較して高いとはいえないが、 RDBMSとして十分な機能を備え、 また、ソースコードが公開されており、誰でもそのプログラムを変更できる点や、 Linuxシステム上やWindowsシステム上に容易にインストールでき、 無料で利用できることなどもあり、 研究分野や非商用分野などで広く利用されている。 他の広く利用されているRDBMSとしては、 ORACLE社のOracleや、IBM社のDB/2、マイクロソフト社のSQL Server、 オープンソースのMySQLやFirebirdなどがある。

■ PostgreSQLの利用方法

□ 工学部電気系における利用方法

工学部電気系では、教育用計算機システムであるUNIXシステム: eiw01〜eiw04上でPostgreSQLを利用することができる。 電気系の大演習室では、前半分の端末がこれらのシステムに接続されているので、 これらの端末を使用するとよい。

ただし、eiw01〜eiw04上のPostgreSQLは、 それぞれ独立のデータベース管理システムとなっており、 データベースも共通ではないため、 一度作成したデータベースを継続して使用したい場合、 同じUNIXシステムを利用する必要がある。 もし、端末が空いていない場合や、演習室以外から利用したい場合には、 sshなどを利用しててリモートログインし、利用すること。

また、教育用計算機システムの利用者であっても、 次節に示すとおり、データベース利用者としての登録が必要となる。 PostgreSQLの利用を予定し、まだ利用登録が済んでいない学生は 三石<takashi@ei...(...は.tohoku.ac.jp)>まで連絡すること。

□ データベース利用者の作成

PostgreSQLなどのDBMSを利用し、データベースの管理を行なうためには、 一般に、DBMSの利用者を登録する必要がある。 この利用者とは、UNIXシステムやWindowsなどの利用者とは異なり、 DBMS毎に自由に作成することができる。

PostgreSQLの利用者を作成するためには、 PostgreSQLの利用者作成権限のある利用者が、 (UNIXやWindowsシステム上の) 利用者作成コマンドであるcreatuserコマンドを使用する。 createuserコマンドの書式は以下のとおりである。

createuserコマンドの書式

$ createuser [<オプション> ] [<ユーザ名> ]

(注) 本授業では、あらかじめUNIXシステムと同じユーザ名で 利用者を登録してあるので、この操作の必要はない。

□ データベースの作成

データベースにデータを登録するためには、 先ず、そのデータベースを作成する。 新規データベースを作成するためには、 (UNIXやWindowsシステム上の) createdbコマンドを利用する。 createdbコマンドの書式は以下のとおりである。

createdbコマンドの書式
$ createdb [<オプション> ...] [<データベース名> ]

もし、データベース名を省略すると、 その利用者のユーザ名と同じ名前のデータベースが作成される。 例えば、UNIXシステム上のPostgreSQLに 新しく自分のユーザ名と同じ名前のデータベースを作成する場合、 Cシェル等のコマンドラインから以下のように入力する。

createdbコマンドの実行例
$ createdb
CREATE DATABASE

データベースが正しく作成されているか確認するには、 (UNIXやWindowsシステムにおける) PostgreSQLへの問合せコマンドであるpsqlコマンドに "-l"オプションをつけて以下のように入力する。

"psql -l"によるデータベースの確認
$ psql -l
         List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 takashi   | takashi  | EUC_JP
 template0 | postgres | EUC_JP
 template1 | postgres | EUC_JP
(3 rows)

ただし、作成されたデータベースは、空のデータベースであり、 データベースを作成しただけではデータを登録するテーブルもない。 データベース上にテーブルを生成し、データを登録するために、 後述するSQLによりデータベースへの問い合わせを行なう必要がある。 また、同じDBMS上に同じ名前のデータベースを作成することはできない。

□ SQLによる問い合わせ

PostgreSQLへのアクセス

DBMSにアクセスし、データベースを利用するためには、 SQLによる問い合わせを行なう。 PostgreSQLに対してSQLによる問い合わせを行なうには、 (UNIXやWindowsシステム上の) psqlコマンドを利用する。 psqlコマンドの書式は以下のとおりである。

psqlコマンドの書式
$ psql [<オプション> ...] [<データベース名> [<ユーザ名> ]]

もし、自分が所有するデータベースにアクセスしたい場合には、 ユーザ名を省略することができる。 また、ユーザ名と同じ名前のデータベースにアクセスする場合には、 データベース名も省略できる。 従って、自分の所有する、ユーザ名と同じデータベースにアクセスする場合は、 引数に何も指定せず、psqlコマンドを実行すればよい。 psqlコマンドを実行すると、以下のように簡単な説明が表示された後、 SQL文を入力するためのコマンドプロンプトとして"=>"が表示される。

psqlコマンドの実行例
$ psql
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

=>
テーブルの作成と削除

リレーショナルデータベースにデータを登録するためには、 先ず、データを登録するためのテーブルを作成する。 SQLによる問合せにより新規テーブルを作成するには、 create table文を利用する。 create table文の書式は、以下のようになる(途中の改行は入れなくてもよい)。

create table文の書式

=> create table <テーブル名> ( <属性1> <型1> [<オプション1>],
<属性2> <型2> [<オプション2>],
...
<属性n> <型n> [<オプションn>] );

例えば、表1に示すスキーマによるテーブル: ei_studentsを作成する場合、 以下のようにSQLを発行する("(>"は、入力継続のためのプロンプトを示す)。

create table文の実行例
=> create table ei_students (
(> id       varchar(8)  not null,
(> ename    varchar(30) not null,
(> jname    varchar(30),
(> age      integer,
(> gender   boolean);

表1: ei_studentsのスキーマ
属性 必須/非必須 内容
id 文字列(8文字まで) 必須 学籍番号
ename 文字列(30文字まで) 必須 英文氏名
jname 文字列(30文字まで) 非必須 和文氏名
age 整数 非必須 年齢
gender 真偽値 非必須 性別(true: 男性 / false: 女性)

もし、作成したテーブルを削除したい場合には、drop table 文を利用する。 drop table文の書式は、以下のようになる。

drop table文の書式
=> drop table <テーブル名>;

例えば、先に作成したテーブル: ei_studentsを削除する場合、 以下のようにSQLを発行する。

drop table文の実行例
=> drop table ei_students;
データの登録

作成したテーブルに対して具体的なデータを登録するには、 SQLのinsert文を使用する。 insert文の書式は以下のようになる。

insert文の書式
=> insert into <table-name> values ( <value-1> , <value-2> , ..., <value-n> );

例えば、テーブルei_studentsに表2に示すデータを登録するには、 以下のように繰り返しinsert文を実行する。

insert文の実行例
=> insert into ei_students values ( 'a1fm1001', 'Masayuki Torai', '虎井 正之', 37, true);
INSERT 41751 1
=> insert into ei_students values ( 'a1fm1002', 'Yuji Tameyama', '為山 雄二', 36, true);
INSERT 41752 1
=> insert into ei_students values ( 'a1fm1003', 'Yasuto Izumikawa', '泉川 靖人', 35, True);
INSERT 41753 1
=> insert into ei_students values ( 'a1fm1004', 'Yuichi Ogawa', '小河 雄一', 31, true);
INSERT 41754 1
データの参照

テーブルに登録されたデータを参照するには、 select文を使用する。 select文の書式は以下のようになる。

select文の書式
=> select <atributes> from <table-name> [where <condition> ] ;

例えば、テーブルei_studentsに登録された全てのデータを参照するには select文の属性に"*"を指定し、以下のように入力する。

select文によるテーブル中の全データの参照
=> select * from ei_students;
    id    |       ename       |   jname   | age | gender
----------+-------------------+-----------+-----+--------
 a1fm1001 | Masayuki Torai    | 虎井 正之 |  36 | t
 a1fm1002 | Yuji Tameyama     | 為山 雄二 |  35 | t
 a1fm1003 | Yasuto Izumikawa  | 泉川 靖人 |  34 | t
 a1fm1004 | Yuichi Ogawa      | 小河 雄一 |  30 | t
(4 rows)

テーブル中の特定の属性に登録されたデータを参照するには、 select文の属性に、参照したい属性名を","で区切って指定する。 例えば、テーブルei_studentsのjnameとageを参照する場合、以下のように入力する。

select文による特定の属性のデータの参照
=> select jname, age from ei_students;
   jname   | age
-----------+-----
 虎井 正之 |  36
 為山 雄二 |  35
 泉川 靖人 |  34
 小河 雄一 |  30
(4 rows)

また、ある条件に一致したデータが含まれる行のデータを参照するには、 whereに続けて条件を指定する。 例えば、テーブルei_studentsにおいて、 属性ageの値が35より大きいデータを含む行を参照する場合、 以下のように入力する。

select文における条件の指定
=> select * from ei_students where age > 35;
    id    |       ename       |   jname   | age | gender
----------+-------------------+-----------+-----+--------
 a1fm1001 | Masayuki Torai    | 虎井 正之 |  36 | t
(1 rows)
データの更新

登録したデータに間違いやその後の変更があった場合など、 テーブルの内容を変更したい場合には、update文を使用する。 update文の書式は以下のようになる。

update文の書式
=> update <table-name> 
    set   <attribute-1> = <value-1>, <attribute-2> = <value-2>, ...
    where <condition> ;

例えば、テーブルei_studentsの中のidの値が'a1fm1003'の行において、 ageの値を'35'に変更したい場合には、 以下のように入力する。

update文によるデータの更新例
=> update ei_students
(>    set   age = '35'
(>    where id = 'a1fm1003';
UPDATE 1
=> select * from ei_students;
    id    |       ename       |   jname   | age | gender
----------+-------------------+-----------+-----+--------
 a1fm1001 | Masayuki Torai    | 虎井 正之 |  36 | t
 a1fm1002 | Yuji Tameyama     | 為山 雄二 |  35 | t
 a1fm1003 | Yasuto Izumikawa  | 泉川 靖人 |  34 | t
 a1fm1004 | Yuichi Ogawa      | 小河 雄一 |  30 | t
(4 rows)
データの削除

テーブルに登録されているデータを削除する場合、delete文を使用する。 delete文の書式は以下のようになる。

delete文の書式
=> delete from <table-name> where <condition> ;
    

これにより、指定された条件に一致した行が削除される。 例えば、テーブルei_studentsの中のidの値が'a1fm1004'の行を削除したい場合には、 以下のように入力する。

delete文によるデータの削除例
=> delete from ei_students where id = 'a1fm1004';
DELETE 1
=> select * from ei_students;
    id    |       ename       |   jname   | age | gender
----------+-------------------+-----------+-----+--------
 a1fm1001 | Masayuki Torai    | 虎井 正之 |  36 | t
 a1fm1002 | Yuji Tameyama     | 為山 雄二 |  35 | t
 a1fm1003 | Yasuto Izumikawa  | 泉川 靖人 |  34 | t
(3 rows)
PostgreSQLへの問い合わせの終了

psqlコマンドの実行を終了し、PostgreSQLへの問い合わせを終えるには、 以下のように"\q"を入力するか、もしくは、"Ctrl-D"を入力する。

PostgreSQLへの問い合わせの終了
=> \q
$

参考書籍、Web

  1. John Worsley, Joshua Drake 著: 「実践 PostgreSQL」, オライリー・ジャパン, ISBN4-87311-102-1, ¥4,800-
  2. 日本PostgreSQLユーザー会 訳: 「PostgreSQL オフィシャルマニュアル」, インプレス, ISBN4-8443-1589-7, ¥4,980-
  3. 日本PostgreSQLユーザ会 訳: 「PostgreSQL日本語ドキュメント」,
    http://www.postgresql.jp/document/

Last modified: Mon May 05 14:23:19 JST 2008