PostgreSQL 13に複数のカラムに対してPRIMARY KEY制約を設定する

2022年1月15日

環境
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, 営業課) はすでに存在します。

PostgreSQL

Posted by arkgame