私はIntelliJとデータベースツールを使用しています。Postgresql INSERT - 次のIDを自動取得しますか?
が、私はその後、私の値を変更し、ヒット:
私はクローンオプションを使用し...私はいくつかのデータに問題があったので、私は、行を削除したが、その後多くのカップルを追加したいですcommit
ボタン私は、コンソールおよび手動挿入を経由して試してみました
ERROR: duplicate key value violates unique constraint "Primary Key some_table" Detail: Key (id)=(58) already exists.
が、私は同じエラーを取得:
しかし、挿入はエラーで失敗しました。 私がこれを行うたびに、IDは増分します...私は何千ものレコードを持っていますので、私の指がスナップするまでクリックし続けることはできません。
これは、(表が作成されたとき)id
は、次のようになります。
id bigserial not null constraint "Primary Key some_table"
primary key
私はテーブルを変更しようとすると、私はidはこのよう設定されたデフォルト値を持っている参照してください。
nextval('some_table_id_seq'::regclass)
私が試した:
INSERT INTO some_table (id,...columns..) VALUES (DEFAULT,...columns...);
と
INSERT INTO some_table (...columns..) VALUES (...columns...);
が、私は同じエラーを取得...
私はMAX id
を取得するクエリを実行している何かlikeを行うことができ実現し、その後、私の挿入を行いますが、それは私には少しばかげているようです。
INSERT
は自動的に新しい/次の番号を取得するように調整できますかid
?
たとえば、MSSQLはnewid()
を使用してこれを自動的に処理します。
オーケー更新、私は問題が何であったか...考え出し
私が持っていた以前に、その後もシーケンスをクローン化されたテーブルを、クローン化しました。 id
カラムのデフォルト値はsome_table
で、OLDクローンテーブルのシーケンスを使用していました...
新しいシーケンスを使用するようにシーケンス名を変更していました。
挿入を行う際にも、あなたが使用置き換えることができます自動的にid
(DEFAULT
を参照すると同じ)を生成するために
INSERT INTO some_table (id,...columns..) VALUES (nextval('some_table_id_seq'::regclass),...columns...);
を
は、あなたの助けのためのみんなに感謝します。教訓:テーブルをクローン化しないでください。怠け者ではない。
私は私のポストを更新しました - 私は、残念ながらどちらも仕事をこれらのメソッドの両方を試してみましたが、しました。 – pookie
実際には、実際にシーケンスを使用しているように見えますが、手動で指定されたPKで値が挿入され、未使用のシーケンスが残っている可能性があるため、データベースにすでに挿入されている値よりも遅れています。 –
@pookieシーケンスが実際の値より後ろにある場合は、もちろん簡単にリセットすることができますが、シーケンスのオーバーヘッド値を挿入している人を特定してください。 –