1
に
を存在しないシーケンス値を追加するためにはPostgresを頼む:私は、たとえば、既存のPostgresのテーブルを持って
CREATE TABLE profiles(
profile_id SERIAL PRIMARY KEY,
num_feed integer,
num_email integer,
name text
);
ALTER TABLE ONLY profiles ALTER COLUMN profile_id SET DEFAULT nextval('profiles_profile_id_seq'::regclass);
ALTER TABLE ONLY profiles ADD CONSTRAINT profiles_pkey PRIMARY KEY (profile_id);
CREATE INDEX "pi.profile_id" ON profiles USING btree (profile_id);
そして、これは私が変更することはできません既存のデータである、私は新しいを追加することができますもの。
INSERT INTO profiles VALUES
(3, 2, 5, 'Adam Smith'),
(26, 2, 1, 'Fran Morrow'),
(30, 2, 2, 'John Doe'),
(32, 4, 1, 'Jerry Maguire'),
(36, 1, 1, 'Donald Logue');
問題は、私は新しいデータを挿入しようとしたとき、Postgresはコラム「PROFILE_ID」に(良い)最小値が追加されますが、それは存在しない値に当たったとき/エラー失敗しますが、その値理由存在する。
ERROR: duplicate key value violates unique constraint "profile_id"
DETAIL: Key (profile_id)=(3) already exists.
次の存在しない値を追加することはできますか?
私の場合、既存のprofile_idを変更できない場合はどうなりますか?私ができることは別のものを加えることです。最初から非常に明確でない場合は申し訳ありません。私はすでに私の質問を編集します。 – SianiparD
どの行でエラーが表示されますか?あなたはテーブルを作成した直後に挿入しますか?それともずっと後で?私が説明したように、あなたは 'ALTER SEQUENCE'を使って次の番号を'> max(current_id) 'にすることができます。 –
[CURVAL()](http://dba.stackexchange.com/questions/3281/how-do -i-use-currval-in-postgresql-to-last-inserted-id)を使用して、現在のseq値が何であるかを知ることができます。しかし、あなたはまた、挿入 –