2011-07-04 20 views
12

我已經有一個腳本,將表數據從一個數據庫複製到另一個,但是ID列由一個序列支持,所以當新記錄插入目標表時,nextval(seq)正在返回錯誤的值。重新啓動,以便nextval是下一個未使用的ID

我需要更新序列,以便它從下一個可用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的..你能告訴我如何將整個命令整合爲一體? – pstanton

+0

你可以使用'setval'函數,而不必動態建立'alter sequence'語句;更簡單,但是如果你一個接一個地做這些,不會有什麼真正的區別。 – araqnid

相關問題