Khi tôi xóa tất cả các bản ghi từ một bảng PostgreSQL và sau đó cố gắng để thiết lập lại trình tự để bắt đầu một kỷ lục mới với số 1 khi nó được đưa vào, tôi nhận được kết quả khác nhau:chuỗi PostgreSQL
SELECT setval('tblname_id_seq', (SELECT COALESCE(MAX(id),1) FROM tblname));
này đặt hiện tại giá trị của chuỗi là 1, nhưng bản ghi TIẾP THEO (thực ra là bản ghi đầu tiên vì không có bản ghi nào) được số 2!
Và tôi không thể đặt thành 0, vì giá trị tối thiểu trong chuỗi là 1!
Khi tôi sử dụng:
ALTER SEQUENCE tblname_id_seq RESTART WITH 1;
kỷ lục đầu tiên được chèn thực sự được số 1! Nhưng mã trên không chấp nhận giá trị SELECT thay vì 1.
Tôi muốn đặt lại chuỗi thành số 1 khi không có bản ghi và bản ghi đầu tiên sẽ bắt đầu bằng 1. Nhưng khi có đã ghi lại trong bảng, tôi muốn đặt lại chuỗi để bản ghi tiếp theo được chèn vào sẽ nhận được {cao} +1
Có ai có giải pháp rõ ràng cho việc này không?
Và sử dụng 'COALESCE (MAX (id), 0) + 1' –
Có, nếu không id tiếp theo sẽ va chạm với MAX (id). – araqnid
Tuyệt vời nó hoạt động ngay bây giờ, thanx .... Tôi đã nhìn vào thông số đó, nhưng nó không hoạt động khi tôi thử nó. Tôi phải làm điều gì sai ... – Dylan