22

主キー列「gid」を持つテーブルがあり、そのタイプは「Integer NOT NULL」です。このテーブルにいくつかの値を挿入できるように、「Serial NOT NULL」に変換したいと思います。次のコマンドを使用して、シリアルに変換しました。

CREATE SEQUENCE test_table_gid_seq
        INCREMENT 1
        MINVALUE 1
        MAXVALUE 2147483648 START 1
        CACHE 1;

ALTER TABLE test_table ALTER COLUMN gid
        SET DEFAULT nextval('test_table_gid_seq'::regclass);

このコマンドは、整数をシリアルに変換しました。しかし、テーブルにいくつかのデータを入力しているときに、次のエラーが発生しました:

エラー: 重複するキー値が一意の制約 "pk_test" に違反しています。

これを解決するのを手伝ってください。整数をシリアルに変換する他の方法はありますか?

4

1 に答える 1

27

gid 列の最大値を選択 (max_gid):

SELECT max(gid) FROM test_table;

そして、それをシーケンスの開始点として使用します (おそらく、max_gid+1):

ALTER SEQUENCE test_table_gid_seq RESTART WITH max_gid;
于 2012-09-25T05:53:22.307 に答える