PostgreSQLのDDL文纏め

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 行)

コメント

タイトルとURLをコピーしました