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.テーブルを作成します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
testdb=# create table cft.spinfo (spid integer, name varchar(15), spname varchar(15), primary key(spid, spname));
CREATE TABLE
testdb=# create table cft.spinfo (spid integer, name varchar(15), spname varchar(15), primary key(spid, spname)); CREATE TABLE
testdb=# create table cft.spinfo (spid integer, name varchar(15), spname varchar(15), primary key(spid, spname));
CREATE TABLE

2.¥d コマンドを使って作成したテーブルのカラムの情報を取得します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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)
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)
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 コマンドで表示されたインデックス名を確認します

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
testdb=# \d cft.spinfo_pkey
インデックス"cft.spinfo_pkey"
| タイプ | キー? | 定義
--------+-----------------------+-------+--------
spid | integer | はい | spid
spname | character varying(15) | はい | spname
プライマリキー, btree, テーブル"cft.spinfo"
testdb=# \d cft.spinfo_pkey インデックス"cft.spinfo_pkey" 列 | タイプ | キー? | 定義 --------+-----------------------+-------+-------- spid | integer | はい | spid spname | character varying(15) | はい | spname プライマリキー, btree, テーブル"cft.spinfo"用
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