PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql nextval генерира съществуващи стойности

Има reset_pk_sequences! метод на адаптера на Postgres . Можете да го извикате и той ще го настрои на max(id) + 1, което вероятно е това, което искате.

В някои проекти получавам данни ETL'ed достатъчно често, за да гарантирам рейк задача, за да направя това за всички модели или за определен модел. Ето задачата - включете я в някой Rakefile или в негов собствен под 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

Сега можете да стартирате това или за всички модели (дефинирани в RAIS_ROOT/app/models), като използвате rake reset_sequences , или за конкретен модел чрез предаване на име на клас.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgres:обобщете колона в масив

  2. Postgresql пълнотекстово търсене за чешки език (няма езикова конфигурация по подразбиране)

  3. Пълно копиране на таблица на postgres с SQL

  4. postgresql с функция wrap sql толкова бавен?

  5. Ляво съединение с име на динамична таблица, получено от колона