PostgreSQLの使い方

PostgreSQLの使い方
0312006003
浅川 和久
2008/11/19
PostgreSQLの使い方
1
目次
•
•
•
•
•
•
•
•
•
PostgreSQLのユーザ
ユーザの登録
ユーザの削除
データベースの作成
psql
データの登録
データの表示
データの変更
データの削除
2008/11/19
PostgreSQLの使い方
2
PostgreSQLのユーザ
PostgreSQLには2種類のユーザがある
• スーパユーザ
– データベースの管理を行う特別なユーザ
– 一切のセキュリティチェックが適用されない
• 一般ユーザ
– 通常の作業は一般ユーザで行う
2008/11/19
PostgreSQLの使い方
3
ユーザの登録(1)
• PostgreSQLのスーパユーザになる
• creatuserというUNIXコマンドを実行する
#su - postgres
$createuser foo
データベースのユーザ名とUNIXのユーザ名は一致している必要はない。
ユーザ名はアルファベットで始まる31文字以内のアルファベット小文字、数字、ア
ンダースコアの組み合わせ(空白やハイフンなどの記号、日本語は使えない)
2008/11/19
PostgreSQLの使い方
4
ユーザの登録(2)
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
このユーザが新しいユーザを追加できるかどうか
この質問にyと答えるとスーパユーザと同等の権利を持つユーザを作成する
2008/11/19
PostgreSQLの使い方
5
ユーザの削除
• dropuserコマンドを実行する
• スーパユーザだけが実行できる
#su - postgres
$dropuser foo
2008/11/19
PostgreSQLの使い方
6
データベースの作成
$createdb foo
CREATE DATABASE
ユーザ名と同じ名称のデータベースを作っておくと、psqlコマンドを使ったときに
データベースを指定する必要がなくなる。
データベースを削除する場合はdropdbコマンドを使う。ただし、他人が作ったデー
タベースは削除できない。(スーパユーザなら可能)
2008/11/19
PostgreSQLの使い方
7
psql(1)
• 対話的にデータベースを操作できるコマンド
$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
foo=>
2008/11/19
PostgreSQLの使い方
8
psql(2)
• ユーザ名と異なるデータベースを使う
$psql test
• データベースの一覧を表示する
$psql -l
List of databases
Database | Owner | Encoding
-------------------------------------------foo
| foo
| EUC-JP
regression | postgres | EUC-JP
template1 | postgres | EUC-JP
(3 rows)
2008/11/19
PostgreSQLの使い方
9
テーブルの作成(1)
• CREATE TABLE
CREATE TABLE テーブル名 (列名1 データ型, 列名2 データ型…);
テーブル名、列名は数字以外ではじまる31文字以内のアルファベット小文字、数
字、アンダースコア、日本語の組み合わせが使える。
空白やハイフンなどの記号、予約語は使えない。
2008/11/19
PostgreSQLの使い方
10
予約語
2008/11/19
PostgreSQLの使い方
11
データ型
データ型
意味
データ型
意味
CHAR(n)
nバイトの文字列
(nバイトに満たない場合は空白で埋
める)
DATE
日付
TIME
時刻
TIMESTAM
P
日付と時刻
INTERVAL
時間間隔
BOOL
真偽
POINT
点
BOX
矩形
OID
オブジェクトID
VARCHAR(
n)
最大nバイトの可変長文字列
TEXT
可変長文字列
SMALLINT
2バイト整数
INTEGER
4バイト整数
INT
INTEGERの別名
INT8
8バイト整数
NUMERIC
多倍長整数(有効桁数1000桁まで)
DECIMAL
多倍長整数(有効桁数1000桁まで)
FLOAT
浮動小数点
2008/11/19
OID(オブジェクトID)…
すべてのテーブルを識別できる
PostgreSQLの使い方
12
テーブルの作成(2)
• 「お天気日記」テーブルの作成
DROP TABLE otenki;
CREATE TABLE otenki (
day DATE PRIMARY KEY, --日付(主キー)
tenki TEXT, --天気(晴れ、くもり)
ondo INTEGER, --温度
uryou INTEGER --雨量
);
otenki.sql
otenki.sqlという名前で保存する。
漢字コードはEUC-JPにする。
2008/11/19
PostgreSQLの使い方
13
テーブルの作成(3)
$psql –e –f otenki.sql
DROP TABLE otenki;
psql:otenki.sql : 2 : ERROR : Relation ‘otenki’ does not exist
CREATE TABLE otenki (
day DATE PRIMARY KEY,
tenki TEXT
ondo INTEGER,
uryou INTEGER
);
psql:otenki.sql: 8 : NOTICE: CREATE TABLE/PRIMARY KEY will create
implicit index ‘otenki_pkey’ for table ‘otenki’
CREATE
改行、空白、タブは無視される。
PRIMARY KEYはこの列が主キーであることの指定。
主キーとは、その列の値を指定すれば、行がユニークに定まる列のこと。
2008/11/19
PostgreSQLの使い方
14
テーブルの作成(4)
• テーブルの内容を確認する
foo => \d otenki
Table “otenki”
Attribute
|
Type
|
Modifier
---------------------------------------------------day
|
data
|
not null
tenki
|
text
|
ondo
|
integer |
uryou
|
integer |
Index: otenki_pkey
day列は主キー。主キーの場合はNULL(データが存在しない、定まらないことを
示す)が許されないのでnot nullが自動的に指定される。
index:otenki_pkeyはday列に対応するインデックス。
インデックスはデータを高速に検索するためのしくみ。
2008/11/19
PostgreSQLの使い方
15
データの登録
• テーブルに行を追加する
INSERT INTO テーブル名 VALUES(値1,値2,…)
otenki.sql
DROP TABLE otenki;
CREATE TABLE otenki (
day DATE PRIMARY KEY, --日付(主キー)
tenki TEXT, --天気(晴れ、くもり)
ondo INTEGER, --温度
uryou INTEGER --雨量
INSERT INTO otenki VALUES(‘2000-8-1’,’晴れ’,30,0);
INSERT INTO otenki VALUES(‘2000-8-3’,’曇’,27,10);
INSERT INTO otenki VALUES(‘2000-8-10’,’雨’,25,100);
);
2008/11/19
PostgreSQLの使い方
16
データの表示(1)
• テーブルの行を取り出す(問い合わせ、クエリ)
SELECT 選択項目1,選択項目2…[FROM テーブル1,テーブル2…[WHERE 条件式]]
foo => SELECT * FROM otenki;
day
| tenki | ondo | uryou
---------------------------------------------2000-08-01 | 晴れ | 30 | 0
2000-08-03 | 曇 | 27 | 10
2000-08-10 | 雨 | 25 | 100
foo => SELECT * FROM otenki WHERE tenki = ‘雨’;
day
| tenki | ondo | uryou
---------------------------------------------2000-08-10 | 雨 | 25 | 100
2008/11/19
PostgreSQLの使い方
17
データの表示(2)
foo => SELECT * FROM otenki
WHERE ondo <= 29;
day
| tenki | ondo | uryou
---------------------------------------------2000-08-03 | 曇 | 27 | 10
2000-08-10 | 雨 | 25 | 100
day
tenki
ondo uryou
2000-08-01 晴れ
30
0
2000-08-03 曇
27
10
2000-08-10 雨
25
100
foo => SELECT AVG(ondo) AS 平均気温 FROM otenki;
平均気温
-----------------27
foo => SELECT SUM(uryou) AS 合計雨量 FROM otenki;
合計雨量
-----------------110
2008/11/19
PostgreSQLの使い方
18
データの変更(1)
• UPDATE
UPDATE テーブル名 SET 列名1 = 値1,列名2 = 値2 [WHERE 条件式]
2008/11/19
PostgreSQLの使い方
19
データの変更(2)
foo => UPDATE otenki SET uryou = 20 WHERE day = ‘2000-8-3’;
test => SELECT * FROM otenki;
day
tenki
day
| tenki | ondo | uryou
---------------------------------------------2000-08-01 晴れ
2000-08-01 | 晴れ | 30 | 0
2000-08-03 曇
2000-08-10 | 雨 | 25 | 100
2000-08-10 雨
2000-08-03 | 曇 | 27 | 20
ondo uryou
30
0
27
10
25
100
foo => UPDATE otenki SET uryou = uryou + 10 WHERE day = ‘2000-8-3’;
test => SELECT * FROM otenki;
day
| tenki | ondo | uryou
---------------------------------------------2000-08-01 | 晴れ | 30 | 0
2000-08-03 | 曇 | 27 | 20
2000-08-10 | 雨 | 25 | 100
2008/11/19
PostgreSQLの使い方
20
データの削除
• DELETE
DELETE FROM テーブル名 [WHERE 条件式];
foo => DELETE FROM otenki WHERE day = ‘2000-8-1’;
test => SELECT * FROM otenki;
day
| tenki | ondo | uryou
day
tenki
---------------------------------------------2000-08-03 | 曇 | 27 | 20
2000-08-01 晴れ
2000-08-10 | 雨 | 25 | 100
2000-08-03 曇
2000-08-10 雨
2008/11/19
PostgreSQLの使い方
ondo uryou
30
0
27
20
25
100
21