2012-01-05 25 views
58

Tôi đang cố gắng đặt một chuỗi thành một giá trị cụ thể.Postgres tự thay đổi trình tự

SELECT setval('payments_id_seq'), 21, true 

này đưa ra một lỗi:

ERROR: function setval(unknown) does not exist

Sử dụng ALTER SEQUENCE dường như không làm việc, hoặc?

ALTER SEQUENCE payments_id_seq LASTVALUE 22 

Làm cách nào để thực hiện điều này?

Ref: http://www.postgresql.org/docs/7.4/interactive/functions-sequence.html

+3

Có vẻ như 'setval()' có ít nhất hai đối số. –

Trả lời

64

Các dấu ngoặc đơn được đặt không đúng chỗ:

setval('payments_id_seq', 21, true) 

Nếu không, bạn đang gọi điện thoại setval với một đối số duy nhất, trong khi nó đòi hỏi hai hoặc ba.

+0

Bạn nói đúng, cảm ơn – stef

+1

Đối số cuối cùng "true" có nghĩa là gì? – inafalcao

+1

'true' có nghĩa là giá trị tiếp theo sẽ là số được cung cấp + 1, trong trường hợp này 22.' false' có nghĩa là giá trị tiếp theo sẽ là số được cung cấp hoặc 21. Theo mặc định, setval sẽ hoạt động như thể 'true' đã được chọn. Chi tiết khác: https://www.postgresql.org/docs/9.6/static/functions-sequence.html –

8
setval('sequence_name', sequence_value) 
97

Tôi cho rằng bạn không thực sự sử dụng phiên bản PostgreSQL lỗi thời vô vọng 7.4 và chỉ tham khảo phiên bản sổ tay này do nhầm lẫn.

Cú pháp này là không hợp lệ trong bất kỳ phiên bản của PostgreSQL:


             
  
    ALTER SEQUENCE payments_id_seq LASTVALUE 22 
  

này sẽ làm việc:

ALTER SEQUENCE payments_id_seq RESTART WITH 22; 

và tương đương với:

SELECT setval('payments_id_seq', 22, FALSE); 

Các hiện tạimanual has more.


Đối với các hoạt động lặp đi lặp lại bạn có thể quan tâm:

ALTER SEQUENCE payments_id_seq START WITH 22; -- set default 
ALTER SEQUENCE payments_id_seq RESTART;  -- without value 

START [WITH] cửa hàng vỡ nợ RESTART số, được sử dụng cho RESTART cuộc gọi tiếp theo không có giá trị. Bạn cần Postgres 8.4 hoặc mới hơn cho phần cuối cùng.

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