PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql nextval generowanie istniejących wartości

Istnieje reset_pk_sequences! metoda na adapterze Postgres . Możesz go nazwać, a ustawi go na max(id) + 1, co prawdopodobnie jest tym, czego chcesz.

W niektórych projektach otrzymuję dane ETL wystarczająco często, aby uzasadnić zadanie rake, aby to zrobić dla wszystkich modeli lub dla określonego modelu. Oto zadanie - umieść go w jakimś pliku Rakefile lub w swoim własnym w lib/tasks:

desc "Reset all sequences. Run after data imports"
task :reset_sequences, :model_class, :needs => :environment do |t, args|
  if args[:model_class]
    classes = Array(eval args[:model_class])
  else
    puts "using all defined active_record models"
    classes = []
    Dir.glob(RAILS_ROOT + '/app/models/**/*.rb').each { |file| require file }
    Object.subclasses_of(ActiveRecord::Base).select { |c|
      c.base_class == c}.sort_by(&:name).each do |klass|
        classes << klass
      end
  end
  classes.each do |klass|
      next if klass == CGI::Session::ActiveRecordStore::Session && ActionController::Base.session_store.to_s !~ /ActiveRecordStore/

        puts "reseting sequence on #{klass.table_name}"
        ActiveRecord::Base.connection.reset_pk_sequence!(klass.table_name)
    end
end

Teraz możesz uruchomić to dla wszystkich modeli (zdefiniowanych w RAIS_ROOT/app/models) za pomocą rake reset_sequences , lub dla konkretnego modelu, przekazując nazwę klasy.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ECONNREFUSED dla Postgres na nodeJS z dokerami

  2. Dołącz do danych wyjściowych tablicy unnest bez tworzenia tabeli tymczasowej

  3. jak z wdziękiem zabić nieaktualny postgres procesu serwera?

  4. Jak ustawić domyślne hasło użytkownika w PostgreSQL?

  5. Zduplikowana wartość klucza narusza ograniczenie unikatowości, CakePHP