2011-07-04 13 views
12

böylece bir DB veritabanından tablo verileri kopyalar bir komut dosyası var, ancak yeni bir kayıt hedef tabloya nextval(seq) hedef tabloya eklenir, böylece bir sütun tarafından desteklenir yanlış değer döndürülüyor.restart sonraki sıradaki kimliği

Sıralamayı, bir sonraki kullanılabilir ID'de başlaması için güncellemeliyim. Yukarıdaki ancak sözdizimi hatası üretir

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

:

ben böyle bir şey yapmak istiyorum.

Herkes alternatif bir yaklaşım önerebilir mi?

cevap

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

ya, daha iyisi, bu soruya bakın: cevap için

+0

sayesinde bir yankı psql'in yöneltilen olarak ben bu koşuyorum .. bana anlatabilirsin Bütün komuta kaçmak nasıl? – pstanton

+0

dinamik olarak "alter dizisi" ifadesi oluşturmak yerine 'setval' işlevini kullanabilirsiniz; daha basit, ancak bu tek tek yapıyorsanız, herhangi bir gerçek fark yaratmaz. – araqnid

İlgili konular