PostgreSQL 13に複数のカラムに対してPRIMARY KEY制約を設定する
環境
Windows10 64bit
PostgreSQL 13.2
書式
CREATE TABLE [ IF NOT EXISTS ] テーブル名 (
カラム1 データの型1,
カラム2 データの型2,
[… ,]
PRIMARY KEY ( column_name [, … ] )
)
使用例
1.テーブルを作成します
testdb=# create table cft.spinfo (spid integer, name varchar(15), spname varchar(15), primary key(spid, spname)); CREATE TABLE
2.¥d コマンドを使って作成したテーブルのカラムの情報を取得します
testdb=# \d cft.spinfo テーブル"cft.spinfo" 列 | タイプ | 照合順序 | Null 値を許容 | デフォルト --------+-----------------------+----------+---------------+------------ spid | integer | | not null | name | character varying(15) | | | spname | character varying(15) | | not null | インデックス: "spinfo_pkey" PRIMARY KEY, btree (spid, spname)
3. ¥d コマンドで表示されたインデックス名を確認します
testdb=# \d cft.spinfo_pkey インデックス"cft.spinfo_pkey" 列 | タイプ | キー? | 定義 --------+-----------------------+-------+-------- spid | integer | はい | spid spname | character varying(15) | はい | spname プライマリキー, btree, テーブル"cft.spinfo"用
4.データを挿入します
testdb=# insert into cft.spinfo values(1001, '大崎’, '営業課’), (2002, '山城’, '企画課’),(3003, '山田’, '企画課’);
INSERT 0 3
5.既にテーブルに格納されている値と同じ値を指定してデータを追加します
testdb=# insert into cft.spinfo values(1001, '大崎’, '営業課’);
ERROR: 重複したキー値は一意性制約"spinfo_pkey"違反となります
DETAIL: キー (spid, spname)=(1001, 営業課) はすでに存在します。