2015-02-25 15 views
11

następujące prace w Rails 3 konsola zresetować sekwencje PostgreSQL:Railsy resetują WSZYSTKIE sekwencje PostgreS?

ActiveRecord::Base.connection.reset_pk_sequence!('menucontrols') 
ActiveRecord::Base.connection.reset_pk_sequence!('statuscodes') 
ActiveRecord::Base.connection.reset_pk_sequence!('wostatuses') 
ActiveRecord::Base.connection.reset_pk_sequence!('taskstatuses') 
ActiveRecord::Base.connection.reset_pk_sequence!('priorities') 
ActiveRecord::Base.connection.reset_pk_sequence!('actcodes') 

Czy jest polecenie, które byłyby zresetować wszystkie z nich zamiast zrobić każdy indywidualnie?

Dzięki za pomoc!

Odpowiedz

27

Jest to łatwiejsze

ActiveRecord::Base.connection.tables.each do |t| 
    ActiveRecord::Base.connection.reset_pk_sequence!(t) 
end 
6

Znalazłem jeden sposób to zrobić z tej publikacji: Reset PostgreSQL

umieściłem następujący do seed.rb i pobiegł rake db:seed

ActiveRecord::Base.connection.tables.each do |table| 
    result = ActiveRecord::Base.connection.execute("SELECT id FROM #{table} ORDER BY id DESC LIMIT 1") rescue (puts "Warning: not procesing table #{table}. Id is missing?" ; next) 
    ai_val = result.any? ? result.first['id'].to_i + 1 : 1 
    puts "Resetting auto increment ID for #{table} to #{ai_val}" 
    ActiveRecord::Base.connection.execute("ALTER SEQUENCE #{table}_id_seq RESTART WITH #{ai_val}") 
end 
+0

Tried robi ' reset_pk_sequence! ', ale pojawiły się problemy z nim, gdy użyłem Heroku Postgres VS mój dev PG (z tabelami, w których powinien orked). Być może wynik nowszej wersji PG vs starszej wersji. W każdym razie takie podejście wykonało zadanie, a nawet wszelkie błędy. Bardzo dobrze. – Nuclearman