2017-03-05 12 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'; 

を、それは動作しません。どうしましたか?私はそれを関数にカプセル化する必要がありますか? ありがとうございます。 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; 
関連する問題