sql >> データベース >  >> RDS >> PostgreSQL

Liquibase + Postgresql + Spring Jpa:ID自動インクリメントの問題

    Liquibaseの命令autoIncrement="true" serialを生成します PostgreSQLの列。 serialの場合 列PostgreSQLは、tablename_colname_seqのような名前のシーケンスを作成します 。このシーケンスからデフォルトの列値が割り当てられます。

    ただし、明示的に シリアル列に値を挿入します。シーケンスジェネレーターには影響せず、次の値は変更されません。したがって、重複する値を生成する可能性があります。これはまさにあなたのケースです。

    明示的な値を挿入した後にこれを防ぐには、ALTER SEQUENCEを使用してシーケンスジェネレーターの現在の値を変更する必要があります。 ステートメントまたはsetval()を使用 機能、例:

    ALTER SEQUENCE tablename_colname_seq RESTART WITH 42;
    
    SELECT setval('tablename_colname_seq', (SELECT max(colname) FROM tablename));
    

    これで問題が解決するはずです。



    1. Oracle VMVirtualBoxを使用した仮想マシンの作成

    2. Oracleでの日付減算の問題

    3. SQL Serverデータベース変更リスナーC#

    4. codeigniterアクティブレコードにクエリを挿入した後に最後の挿入IDを取得する方法