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

PostgreSQLの自動インクリメントは更新ごとに増加します

    シーケンスは、その成功に関係なく、挿入が試行されるたびにインクリメントされます。簡単なupdate (あなたの例のように)それをインクリメントしませんが、insert on conflict update insert以降、 updateの前に試行されます 。

    1つの解決策は、idを変更することです bigintへ 。もう1つは、シーケンスを使用せず、自分で管理することです。もう1つは、手動でアップサートを行うことです。

    with s as (
        select id
        from notifications
        where title = 'something'
    ), i as (
        insert into notifications (title, description)
        select 'something', 'whatever'
        where not exists (select 1 from s)
    )
    update notifications
    set title = 'something else'
    where id = (select id from s)
    

    これは、titleを想定しています ユニークです。



    1. Android:NullPointerExceptionフラグメント内のリストビューにデータベースをロードできません

    2. 未定義の値を保持するSQLSelectステートメントの動的列

    3. MySQL-DECIMAL(2、2)の1の値は0.99として出力されます

    4. SQL Server(T-SQL)でAM/PMを時間値に追加する方法