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

行INSERTのシーケンスを更新します

    これは既知の制限です。シーケンスは、 nextval() 関数。これは、フィールドのデフォルト値です。 INSERTでデータを提供する場合 そのフィールドに対して、デフォルト値の式は評価されないため、シーケンスの値は変更されません。

    回避策は、 INSERTの前後にトリガーを設定することです。 setval() 。しかし、このようにあなたはすべき UPDATEでトリガーを設定する必要があります そのフィールドでも、既存のIDをより高いIDに更新するだけで、シーケンスの値を修正できます。

    もう1つの回避策は、そのフィールドで使用可能な値を生成し、フィールドのデフォルト値をその関数の戻り値に設定できるストアド関数を作成することです。次のような何か:

    LOOP
        result = nextval('my_id_seq');
        EXIT WHEN NOT EXISTS (SELECT * FROM my_table WHERE my_id = result);
    END LOOP;
    RETURN result;
    

    ただし、注意が必要です。シーケンスのデフォルト機能は、同時挿入に対して安全です(シーケンスの現在の状態はグローバルであり、トランザクションに依存しません)。これらのフィールドに明示的な値を指定した場合、それは当てはまりません。




    1. $ wpdb-> insertは、キー「1」の重複エントリ「0-0」を生成します

    2. URLにID番号を表示し、データベースの結果をID番号からテキストフィールドにフェッチします

    3. JavaJUnitテスト用の組み込みPostgreSQL

    4. SQLServerで削除されたレコードを復元するノウハウ