Programing

Postgres 수동 순서 변경

crosscheck 2020. 6. 16. 08:20
반응형

Postgres 수동 순서 변경


시퀀스를 특정 값으로 설정하려고합니다.

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)

참고 URL : https://stackoverflow.com/questions/8745051/postgres-manually-alter-sequence

반응형