postgres の自動インクリメントが明示的な ID 挿入で更新されない
2023-09-14 05:13:29
質問
postgresに以下のようなテーブルがあります。
CREATE TABLE "test" (
"id" serial NOT NULL PRIMARY KEY,
"value" text
)
私は以下のような挿入を行っています。
insert into test (id, value) values (1, 'alpha')
insert into test (id, value) values (2, 'beta')
insert into test (value) values ('gamma')
最初の2つの挿入では、私は明示的にidに言及しています。しかし、この場合、テーブルの自動インクリメントポインタは更新されません。したがって、3回目の挿入でエラーが発生しました。
ERROR: duplicate key value violates unique constraint "test_pkey"
DETAIL: Key (id)=(1) already exists.
私はMyISAMとINNODBの両方のエンジンで、Mysqlでこの問題に直面したことはありません。明示的であろうとなかろうと、mysql は常に最大行 ID に基づいてオートインクリメントポインタを更新します。
postgres におけるこの問題の回避策は何でしょうか。私のテーブルのいくつかの ID をより厳密に制御したいので、それが必要です。
UPDATEです。 いくつかの値については、固定IDが必要だからです。他の新しいエントリのために、私は新しいものを作成することを気にしない。
を手動でインクリメントすることで可能かもしれませんね。
nextval
へのポインタを
max(id) + 1
を明示的に挿入しています。しかし、私はそれを行う方法がわからない。
どのように解決するのですか?
そういうことなんだ-。
next_val('test_id_seq')
が呼び出されるのは、システムがこのカラムの値を必要とし、あなたが値を提供していない場合のみです。値を提供した場合、そのような呼び出しは行われず、結果的にシーケンスは "update"されません。
この問題を回避するために、手動で 設定 を手動で設定することで、この問題を回避することができます。
SELECT setval('test_id_seq', (SELECT MAX(id) from "test"));
シーケンスの名前は自動生成され、常に
tablename_columnname_seq
.
関連
-
PostgreSQLのJSONBのマッチングと交差の問題について
-
PostgreSQLがバキュームテーブルの情報を収集する必要があることを発見する方法
-
Postgresql+Springboot ymlの基本的な使い方
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み] postgres: ユーザーをスーパーユーザーにアップグレードしますか?
-
[解決済み] PostgreSQL 自動インクリメント
-
[解決済み] postgres の主キー配列が同期しなくなったときにリセットする方法は?
-
[解決済み] 'ユーザー "postgres" のパスワード認証に失敗しました'
-
[解決済み] Postgres db 8.1 のすべてのシーケンスを SQL でリストアップする
-
[解決済み】psql: FATAL: ロール "postgres" が存在しない
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PostgreSQLのユーザーログイン失敗時の自動ロック解決策
-
PostgreSQLでデータの一括インポートのパフォーマンスを向上させるn個の方法を説明します。
-
Postgresql データベース timescaledb timescaledb 問題 大容量データテーブルをスーパーテーブルに変換すること
-
GROUP BY句での定数使用に関するPostgreSQLの特別な制限について説明します。
-
PostgreSQL] アクティブリンクのあるデータベースを削除する方法
-
[解決済み] PostgreSQLの場合。PostgreSQLのテーブルを表示する
-
[解決済み] PostgreSQLのユーザーパスワードを変更する方法を教えてください。
-
[解決済み] Postgresqlで「大文字小文字を区別しない」クエリを作成する方法は?
-
[解決済み] Postgres でシーケンスをリセットし、id 列を新しいデータで埋めるにはどうすればよいですか?
-
[解決済み] IntegrityError 重複するキー値は一意制約に違反する - django/postgres