PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

postgresql nextval menghasilkan nilai yang ada

Ada reset_pk_sequences! metode pada adaptor Postgres . Anda dapat memanggilnya dan itu akan mengaturnya ke max(id) + 1, yang mungkin Anda inginkan.

Dalam beberapa proyek saya cukup sering mendapatkan data ETL untuk menjamin tugas menyapu untuk melakukan ini untuk semua model, atau untuk model tertentu. Inilah tugasnya - sertakan dalam beberapa Rakefile atau miliknya sendiri di bawah 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

Sekarang Anda dapat menjalankan ini baik untuk semua model (didefinisikan di bawah RAIS_ROOT/app/models) menggunakan rake reset_sequences , atau untuk model tertentu dengan meneruskan nama kelas.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa menambahkan kolom yang tidak mengizinkan nol dalam database Postgresql?

  2. Bagaimana cara mengelompokkan cap waktu ke dalam pulau (berdasarkan celah sewenang-wenang)?

  3. Tambahkan susunan case-insensitive ke PostgreSQL

  4. PostgreSQL tanpa instalasi berjalan di Windows tetapi server tidak memulai di CentOS Linux

  5. Untuk memperbarui beberapa baris yang tidak digandakan sekaligus menggunakan Grup dengan