2017-03-05 38 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; 
相關問題