[pgsql-jp: 26045] Re: 複数のフィールドに対して主キーを設定する

M_Kakitani kakip @ mars.dti.ne.jp
2002年 5月 20日 (月) 16:26:50 JST


垣谷@大田区です。

On Mon, 20 May 2002 13:56:27 +0900
tani <tani @ sn23.com> wrote:
> はじめまして谷と申します。
> 
> すでにあるテーブルの2つのフィールドに主キーを設定したいのです
> が、
> 
> =>ALTER TABLE foo ADD CONSTRAINT pkey PRIMARY KEY( a, b ) ;
> 
> ERROR:  ALTER TABLE / ADD CONSTRAINT is 
>  not implemented for that constraint type.
> 
> とエラーが出てしまいます。

ALTER TABLE 〜 ADD CONSTRAINT 〜 PRIMARY KEY(〜);
自体はまだ実装されてません。エラーの内容そのままです。
ただし、
ALTER TABLE 〜 ADD CONSTRAINT 〜 FOREIGN KEY(〜);
は可能です。(他にもできるできないがあると思いますが試してません。)

--- 実行例 ---
test=# CREATE TABLE tb_a
test-# ( a1 integer, PRIMARY KEY(a1) );
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index 'tb_a_pkey' for table 'tb_a'
CREATE
test=#
test=# CREATE TABLE tb_b
test-# ( b1 integer );
CREATE
test=# ALTER TABLE tb_b ADD CONSTRAINT tb_const_pkey PRIMARY KEY (b1);
ERROR:  ALTER TABLE / ADD CONSTRAINT is not implemented for that constraint type.
test=# ALTER TABLE tb_b ADD CONSTRAINT tb_const_fkey FOREIGN KEY (b1) REFERENCES tb_a (a1) match full;
NOTICE:  ALTER TABLE ... ADD CONSTRAINT will create implicit trigger(s) for FOREIGN KEY check(s)
CREATE
--- 実行例ここまで ---

> また、Create Tableで設定しようとしても
> =>CREATE TABLE foo ( a TEXT PRIMARY KEY,
>                      b TEXT PRIMARY KEY ) ;
> 
> CREATE TABLE/PRIMARY KEY multiple primary keys 
>  for table 'foo' are not allowed
> 
> となります。

これは仲村さんがおっしゃるように

--- 実行例 ---
test=# CREATE TABLE tb_c
test-# (
test(# c1 integer,
test(# c2 integer,
test(# PRIMARY KEY(c1,c2)
test(# );
NOTICE:  CREATE TABLE/PRIMARY KEY will create implicit index 'tb_c_pkey' for table 'tb_c'
CREATE
--- 実行例ここまで ---

こんな感じでできます。

-- 
Kakitani
kakip @ mars.dti.ne.jp




pgsql-jp メーリングリストの案内