DB=> create table テーブル名 (
列名 データ型 [制約, ...],
列名 データ型 [制約, ...],
・
・
);
・データ型
| serial | 通し番号(1 ~ 2147483647) |
| bigserial | 通し番号(1 ~ 9223372036854775807) |
| smallint | 整数(-32768 ~ +32767) |
| integer, int | 整数(-2147483648 ~ +2147483647) |
| bigint | 整数(± 9223372036854775807) |
| numeric(全桁数, 小数点以下桁数) | 数値(低速) |
| "char" | 1バイト1文字 |
| char(文字数) | 固定長文字列(低速) |
| varchar(文字数) | 制限付き可変長文字列(文字数以下) |
| text | 制限なし可変長文字列 |
| boolean | 真偽値(1,0, yes,no, などを t,f で保存) |
| date | 日付(現在の値 : current_date) |
| time[(秒小数以下、最小6桁)] [with time zone] | 時刻(現在の値 : current_time) |
| timestamp[(同上)] [with time zone] | 日時(現在の値 : current_timestamp) |
| inet | IPv4, IPv6 |
数値型以外のデータ型の列では、挿入、検索するデータが数値でも、'(シングルクォート)で囲む。
・確認
[user]$ pg_dump -U ユーザー名 --schema-only データベース名 --table=テーブル名
DB=> \d テーブル名
・削除
DB=> drop table テーブル名;
DB=> create sequence シーケンス名
[increment 増加数(省略時 1)]
[minvalue 最小値(省略時 1)]
[maxvalue 最大値(省略時 2147483647)]
[start 初期値(省略時 minvalue)]
[cycle(最大値に達した時に初期値に戻る)];
・確認
DB=> \ds
・値の取り出し
現在の値
DB=> select last_value from シーケンス名;
次の値(現在の値 + 増加数)
DB=> select nextval ('シーケンス名');
DB=> insert into テーブル名(列名) values( nextval('シーケンス名') );
値のリセット
DB=> select setval('シーケンス名', 現在の値);
・削除
DB=> drop sequence シーケンス名;
DB=> create table member (
no serial primary key,
flag smallint not null check ( flag in (1,0) ),
id varchar(15) not null unique,
name varchar(30) not null,
score smallint not null default 50
);
・NOT NULL 制約(not null)
列が NULL 値を取れなくなる。
・デフォルト値
create table テーブル名 (
列名 データ型 not null default デフォルト値,
);
・一意性制約(unique)
列のデータが、テーブル内の全ての行で一意となる。NULL 値は例外。
・主キー(primary key)not null と unique を合わせたもの、重複も NULL 値も許されない。
列または列のグループを、行の一意の識別子として使用できる。
連結主キー
create table テーブル名 (
列名 データ型,
列名 データ型,
primary key (列名, 列名)
);
・検査制約(check)
列の値が条件を満たすように指定。 検査式が真または NULL 値の場合のみ、データが挿入される。 制約名を省略した場合、自動的に設定される。
create table テーブル名 (
列1 データ型 not null [constraint 制約名] check (列名1 > 0), # 列制約
列2 データ型 not null [constraint 制約名] check (列名2 > 0), # 列制約
[constraint 制約名] check (列1 > 列2) # テーブル制約
);
・参照整合性制約
列の値が、他のテーブルの列と一致しなければならない事を指定。 参照する側(参照テーブルの参照列)は、参照される側(被参照テーブルの被参照列) にない値を挿入できなくなる。 複数のテーブルを関連付ける、列を外部キーと呼ぶ。 制約名を省略した場合、自動的に設定される。
create table 参照テーブル (
参照列 データ型 [constraint 制約名] references 被参照テーブル(被参照列),
);
create table 参照テーブル (
参照列 データ型 制約,
・
[constraint 制約名] foreign key( 参照列,... ) references 被参照テーブル( 被参照列,... )
);
参照される側(被参照テーブルの被参照列)の変化に対応したい場合
on update cascade # 被参照列の値が変更されると参照列の値も変更される
on delete cascade # 被参照列の行が削除されると参照列の行も削除される
references 被参照テーブル(被参照列) on update cascade on delete cascade,
検索の高速化。primary key, unique 制約を設定した列には、自動的にインデックスが作成される。
・作成
DB=> create index インデックス名 on テーブル名 (列名);
where 句に複数の列が and 条件で結合している場合、複合インデックス
DB=> create index インデックス名 on テーブル名 (列名,列名,...);
・確認
DB=> \di
・削除
DB=> drop index インデックス名;
DB=> alter table 元テーブル名 rename to 新テーブル名;
・列名の変更
DB=> alter table テーブル名 rename 元列名 to 新列名;
・データ型の変更
変更前に列に関する制約を全て削除し、変更後に適切な制約を付け直す。
DB=> alter table テーブル名 alter 列名 type データ型;
varchar 型を integer 型に変更
DB=> alter table テーブル名 alter 列名 type integer using cast (列名 as integer);
・列の追加
DB=> alter table テーブル名 add 列名 データ型 [制約];
・列の削除
DB=> alter table テーブル名 drop 列名 [cascade];
cascade : 参照整合性制約の被参照列に依存する全てを削除
・not null 制約の追加
DB=> alter table テーブル名 alter 列名 set not null;
・not null 制約の削除
DB=> alter table テーブル名 alter 列名 drop not null;
・デフォルト値の追加
DB=> alter table テーブル名 alter 列名 set default デフォルト値;
・デフォルト値の削除
DB=> alter table テーブル名 alter 列名 drop default;
・制約の追加
制約名を省略した場合、自動的に設定される。
DB=> alter table テーブル名 add [constraint 制約名] 制約;
・制約の削除
DB=> alter table テーブル名 drop constraint 制約名 [cascade];
cascade : 参照整合性制約の被参照列に依存する全てを削除
デフォルトでは、作成者と管理ユーザー以外はアクセス出来無い。
・付与
DB=> grant 権限,権限,... on テーブル名,... to ユーザー名,... [with grant option];
with grant option(許可されている権限を付与できる)
・剥奪
DB=> revoke 権限,権限,... on テーブル名,... from ユーザー名,...;
| all | 全権限 |
| select | 検索 |
| insert | 挿入 |
| update | 更新 |
| delete | 削除 |
| truncate | 全行削除 |
| references | 外部キー作成 |
| trigger | トリガー |
DB=> \z
ユーザー名 = arwdDxt/付与したユーザー名
| a | insert(append) |
| r | select(read) |
| w | update(write) |
| d | delete |
| D | truncate |
| x | references |
| t | create trigger |
| * | 直前の権限を付与できる |