PostgreSQLのシーケンスがずれた!
開発中色々いじっていたらシーケンスがずれた、なんてことは数年に一度くらい経験したりしないでしょうか?
そんな時にぱっと直したいときは、以下を流し込めばOKです。
DO $$ DECLARE r RECORD; s text := 'public'; BEGIN FOR r IN SELECT tablename FROM pg_tables WHERE schemaname = s LOOP BEGIN EXECUTE 'SELECT setval(' || quote_literal(s || '.' || r.tablename || '_id_seq') || ', (SELECT COALESCE(MAX(id), 1) FROM ' || s || '.' || r.tablename || '));'; EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'エラーが発生したテーブル: %', r.tablename; END; END LOOP; END; $$;
schemaやシーケンステーブルの命名規則が異なる場合は適宜修正してください。
エラーが発生したテーブルも適宜良しなに。