PostgreSQLのDDL文纏め
create table文です。publicスキーマにempuserテーブルを作成します。
create table "public".empuser ( id integer not null , firstname character varying(60) not null , lastname character varying(60) not null , age integer not null , primary key (id) );
PostgreSQLでは、文字列はcharacter varying(number)とします。
数値はintegerです。
制約
制約にはいろいろ種類があり、以下になります。
制約 |
---|
NOT NULL |
主キー制約 |
外部キー制約 |
ユニーク制約 |
チェック制約 |
デフォルト制約 |
not null制約については、not nullと指定します。これはほぼどのRDBMSも同じです。
チェック制約という制約があります。
例えば年齢は0歳以上のはずです。こういう決まりきったことはテーブルで制約を付けます。
create table "public".empuser ( id integer not null , firstname character varying(60) not null , lastname character varying(60) not null , age integer not null check(age > 0) , primary key (id) );
テーブルのレコードを一意にするキーをプライマリキーと言いますが、PostgreSQLではprimary key (column)
と指定します。
複合主キーの場合は、primary key(column1, column2)
という感じで指定します。
ユニークキーはその列で一意のデータでないといけません。但し、NULLを許容し、かつ、NULLのレコードが複数あっても重複しているとはみなしません。
create table "public".empuser ( id integer not null , name character varying(60) unique , primary key (id) );
複合ユニークキーを指定する場合は、unique(column1, column2)
と指定します。
create table "public".empuser ( id integer not null , firstname character varying(60) not null , lastname character varying(60) not null , age integer not null , primary key (id) , unique(firstname, lastname) );
PostgreSQL9.4よりjson形式のカラムを指定できるようになりました。
jsonb(json blob)を使います。
CREATE TABLE empuser( id integer primary key, data jsonb not null );
エンティティ・アトリビュート・バリュー(EAV)のソリューションとして使うことができるカラムです。
外部キー制約は、中間テーブルなどで使用します。外部キー制約を付けるカラムは、テーブルの主キーである必要があります。以下のempusersテーブルのidカラムは主キー、projectsテーブルのidカラムは主キーとなります。
主キーのテーブルが親テーブル、外部キー制約があるカラムが子テーブルです。
create table "public".chukan ( emp_id integer not null , project_id integer not null , foreign key(emp_id) references public.empusers(id) , foreign key(project_id) references public.projects(id) )
参照されているテーブル(親テーブル)のレコードが削除・更新された際に参照しているレコードも合わせて削除・更新することができます。デフォルトではNOT ACTIONが設定されており、エラーになります。
値 | アクション |
---|---|
NOT ACTION | エラー |
CASCADE(削除) | 参照しているデータを削除する |
CASCADE(更新) | 参照しているデータを更新する |
SET NULL | 参照しているデータ(列)をNULLにする |
SET DEFAULT | 参照しているデータ(列)をデフォルト値にする |
タイムゾーン変更
DB単位でタイムゾーンを変更します。
ALTER DATABASE "DB名" SET timezone TO 'Asia/Tokyo';
確認します。
postgres=> show timezone; TimeZone ------------ Asia/Tokyo (1 行)
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント