시퀀스를 특정 값으로 설정하려고합니다.
SELECT setval('payments_id_seq'), 21, true
오류가 발생합니다.
ERROR: function setval(unknown) does not exist
사용도 ALTER SEQUENCE
작동하지 않는 것 같습니다?
ALTER SEQUENCE payments_id_seq LASTVALUE 22
이것을 어떻게 할 수 있습니까?
참조 : https://www.postgresql.org/docs/current/static/functions-sequence.html
답변
괄호가 잘못 배치되었습니다.
SELECT setval('payments_id_seq', 21, true); # next value will be 22
그렇지 않으면 setval
하나 또는 두 개의 인수가 필요한 단일 인수로 호출 합니다.
답변
이 구문은 모든 버전의 PostgreSQL 에서 유효하지 않습니다 .
ALTER SEQUENCE payments_id_seq LASTVALUE 22
이것은 작동합니다 :
ALTER SEQUENCE payments_id_seq RESTART WITH 22;
다음과 같습니다.
SELECT setval('payments_id_seq', 22, FALSE);
현재 매뉴얼 ALTER SEQUENCE
및 시퀀스 기능에 대한 추가 정보 .
참고 setval()
예상하는 하나 (regclass, bigint)
또는 (regclass, bigint, boolean)
. 위의 예에서는 형식화되지 않은 리터럴을 제공하고 있습니다. 그것도 작동합니다. 그러나 타입 변수를 함수에 공급하면 함수 타입 해상도를 만족시키기 위해 명시적인 타입 캐스트 가 필요할 수 있습니다 . 처럼:
SELECT setval(my_text_variable::regclass, my_other_variable::bigint, FALSE);
반복되는 작업의 경우 다음에 관심이있을 수 있습니다.
ALTER SEQUENCE payments_id_seq START WITH 22; -- set default
ALTER SEQUENCE payments_id_seq RESTART; -- without value
START [WITH]
기본 RESTART
번호를 저장합니다.이 번호는 RESTART
값이없는 후속 통화에 사용됩니다 . 마지막 부분에는 Postgres 8.4 이상이 필요합니다.
답변
사용하다 select setval('payments_id_seq', 21, true);
setval
3 개의 매개 변수를 포함합니다.
- 첫 번째 매개 변수는
sequence_name
- 두 번째 매개 변수는 다음입니다
nextval
- 세 번째 매개 변수는 선택 사항입니다.
setval의 세 번째 매개 변수에서 true 또는 false를 사용하는 방법은 다음과 같습니다.
SELECT setval('payments_id_seq', 21); // Next nextval will return 22
SELECT setval('payments_id_seq', 21, true); // Same as above
SELECT setval('payments_id_seq', 21, false); // Next nextval will return 21
시퀀스 이름, 다음 시퀀스 값의 하드 코딩을 피하고 빈 열 테이블을 올바르게 처리하는 더 좋은 방법은 다음과 같습니다.
SELECT setval(pg_get_serial_sequence('table_name', 'id'), coalesce(max(id), 0)+1 , false) FROM table_name;
여기서 table_name
테이블의 이름은, id
는 IS primary key
테이블을
답변
setval('sequence_name', sequence_value)
답변
를 통해 시퀀스를 변경하려고 시도하지 않습니다 setval
. 그러나 사용하여 ALTER
시퀀스 이름을 올바르게 작성하는 방법이 발표되었습니다. 그리고 이것은 나에게만 효과적입니다.
-
다음을 사용하여 필요한 시퀀스 이름을 확인하십시오.
SELECT * FROM information_schema.sequences;
-
ALTER SEQUENCE public."table_name_Id_seq" restart {number};
내 경우에는
ALTER SEQUENCE public."Services_Id_seq" restart 8;
답변
