2011-07-04 7 views
12

あるDBから別のDBにテーブルデータをコピーするスクリプトがありますが、新しいレコードが宛先テーブルに挿入されたときにID列がバックアップされます。nextval(seq)間違った値を返しています。nextvalが次の未使用のIDであるようにrestart

次の利用可能なIDから開始するようにシーケンスを更新する必要があります。上記ただし、構文エラーを生成

ALTER SEQUENCE seq_id RESTART WITH 
    (SELECT MAX(id) FROM tbl); 

は、私のような何かをしたいです。

誰にでも代替方法を提案できますか?

答えて

9
DO $$ 
    SELECT INTO m MAX(id) FROM tbl; 
    EXECUTE 'ALTER SEQUENCE seq_id RESTART WITH ' || m; 
END$$; 

か、いっそのこと、この質問を参照してください。答えを

+0

おかげで、エコーはpsqlのにパイプとして、私はこれを実行している..あなたは私を伝えることができますコマンド全体を1つにエスケープする方法は? – pstanton

+0

'alter sequence'文を動的に構築するのではなく、' setval'関数を使うことができます。よりシンプルですが、これらを1つずつ実行している場合は、実際の違いはありません。 – araqnid

関連する問題