プライマリキーをつけ直してみる - PostgreSQL

CREATE TABLE hoge_table (
  hoge_column integer NOT NULL,
  PRIMARY KEY(hoge_column)
);

上記のような CREATE TABLE 文を実行すると hoge_table_pkey のような名前で
プライマリキーが作成される。

これが気に入らないので自分で名前を決めて作り直したいと思った。

pg_dump の出力などを参考にしながら、次のようにしてつけ直しができたのでメモ。
(PostgreSQL 8.1 で実施、他は知らない)


ドロップして、

ALTER TABLE ONLY hoge_table DROP CONSTRAINT hoge_table_pkey;

追加する。

ALTER TABLE ONLY hoge_table ADD CONSTRAINT hogetable_key1 PRIMARY KEY (hoge_column);



test=> CREATE TABLE hoge_table (
test(> hoge_column integer NOT NULL,
test(> PRIMARY KEY(hoge_column)
test(> );
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "hoge_table_pkey" for table "hoge_table"
CREATE TABLE
test=> \d hoge_table
Table "public.hoge_table"
Column | Type | Modifiers

                                                                    • -

hoge_column | integer | not null
Indexes:
"hoge_table_pkey" PRIMARY KEY, btree (hoge_column)

test=> ALTER TABLE ONLY hoge_table DROP CONSTRAINT hoge_table_pkey;
ALTER TABLE
test=> \d hoge_table
Table "public.hoge_table"
Column | Type | Modifiers

                                                                    • -

hoge_column | integer | not null

test=> ALTER TABLE ONLY hoge_table ADD CONSTRAINT hogetable_key1 PRIMARY KEY (hoge_column);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "hogetable_key1" for table "hoge_table"
ALTER TABLE
test=> \d hoge_table
Table "public.hoge_table"
Column | Type | Modifiers

                                                                    • -

hoge_column | integer | not null
Indexes:
"hogetable_key1" PRIMARY KEY, btree (hoge_column)

test=>


なお、既にプライマリキーが存在するテーブルに追加しようとすると怒られる。

ERROR:  multiple primary keys for table "hoge_table" are not allowed