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 |
* | 直前の権限を付与できる |