2017-03-05 66 views
0

我是Postgres的新手。 我使用Pgadmin III,我需要参数化'更改序列'中的值。 我试图执行此代码:如何使用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'; 

但它不起作用。怎么了?我需要将它封装在一个函数中? 谢谢。 D.

回答

2

对于设定值手动序列,但你可以使用ALTER SEQUENCE seq_name RESTART WITH value

关于你的例子,你需要的东西是这样的:

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 
0

无需动态SQL。

只需创建序列,然后改变当前值:

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; 
相关问题