PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Gia tăng tự động PostgreSQL tăng trên mỗi bản cập nhật

Một trình tự sẽ được tăng lên bất cứ khi nào cố gắng chèn bất kể thành công của nó. Một update đơn giản (như trong ví dụ của bạn) sẽ không gia tăng nó mà là một insert on conflict update sẽ kể từ khi insert được thử trước khi cập nhật update .

Một giải pháp là thay đổi id thành bigint . Cách khác là không sử dụng một trình tự và tự quản lý nó. Và một cách khác là thực hiện nâng cấp thủ công:

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)

Điều này giả sử title là duy nhất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn không trả về gì từ cơ sở dữ liệu

  2. Tại sao PostgreSQL coi các ranh giới NULL trong các loại phạm vi là khác biệt với các ranh giới vô hạn?

  3. Cách kiểm tra xem một ô thuộc kiểu mảng số nguyên có chứa một giá trị nhất định trong SQL hay không

  4. Bảng truy vấn với array_agg / median của TẤT CẢ các vị trí trước đó, LAST_10, LAST_50, ngoại trừ vị trí hiện tại

  5. R2DBC và enum (PostgreSQL)