2017-03-05 4 views
0

저는 Postgres에 초보자입니다. Pgadmin III를 사용하고 'alter sequence'의 스테이트먼트에서 값을 매개 변수화해야합니다. 이 코드 실행을 시도 :Postgresql을 사용하여 시퀀스의 시작 값을 매개 변수화하는 방법

select coalesce(MAX(ID)+1,1) as max into myTempTable from myTable; 
EXECUTE immediate 'ALTER SEQUENCE mySequence INCREMENT BY 1 START WITH ' || max || ' MINVALUE 1 NO CYCLE'; 

을했지만 작동하지 않습니다. 뭐가 문제 야? 함수에 캡슐화해야합니까? 감사합니다. 동적 SQL에 대한

CREATE SEQUENCE testseq; 

DO $$ 
DECLARE 
    maxid INT; 
BEGIN 
    SELECT coalesce(MAX(ID)+1,1) FROM myTable INTO maxid; 
    EXECUTE 'ALTER SEQUENCE testseq RESTART WITH '|| maxid; 
END; 
$$ LANGUAGE PLPGSQL 

답변

2

, 당신은 당신의 예에 관련하여 ALTER SEQUENCE seq_name RESTART WITH value

을 사용할 수 있습니다, 당신은 이런 식으로 뭔가를해야합니다.

현재 값을 그냥 시퀀스를 생성하고 변경 :

create sequence mysequence increment by 1 minvalue 1 no cycle; 
select setval('mysequence', (select coalesce(MAX(id)+1,1) from mytable)); 
당신은 아마 해당 컬럼의 기본이 순서를 만들고 싶어

:

alter table mytable alter column id 
    set default nextval('mysequence'); 

alter sequence mysequence owned by mytable.id; 
0

필요가 없습니다 : 값을 설정하면 수동으로 시퀀스를 들어 D.