2011-07-04 24 views
12

Tôi có tập lệnh sao chép dữ liệu bảng từ một DB sang một DB khác, tuy nhiên cột ID được hỗ trợ bởi một chuỗi sao cho khi một bản ghi mới được chèn vào bảng đích nextval(seq) đang trả về giá trị sai.khởi động lại để tiếp theo là id không sử dụng tiếp theo

Tôi cần phải cập nhật chuỗi để bắt đầu tại ID khả dụng tiếp theo.

tôi muốn làm một cái gì đó như:

ALTER SEQUENCE seq_id RESTART WITH 
    (SELECT MAX(id) FROM tbl); 

Trên đây tạo ra một lỗi cú pháp tuy nhiên.

Có ai có thể đề xuất phương pháp thay thế không?

Trả lời

9
DO $$ 
    SELECT INTO m MAX(id) FROM tbl; 
    EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m; 
END$$; 

hoặc, tốt hơn chưa, xem câu hỏi này:

+0

cảm ơn cho câu trả lời, tôi đang chạy này như một tiếng vang đường ống vào psql .. có thể bạn cho tôi biết làm thế nào để thoát khỏi toàn bộ lệnh thành một? – pstanton

+0

bạn có thể sử dụng hàm 'setval' thay vì phải xây dựng động một câu lệnh' alter sequence'; đơn giản hơn, nhưng không tạo ra bất kỳ sự khác biệt thực sự nào nếu bạn đang thực hiện từng cái một. – araqnid

Các vấn đề liên quan