PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

postgresql nextval tạo các giá trị hiện có

Có một reset_pk_sequences! trên Bộ điều hợp Postgres . Bạn có thể gọi nó và nó sẽ đặt nó thành max (id) + 1, có thể là những gì bạn muốn.

Trong một số dự án, tôi nhận được dữ liệu ETL thường xuyên, đủ để đảm bảo một nhiệm vụ cào để thực hiện điều này cho tất cả các mô hình hoặc cho một mô hình cụ thể. Đây là nhiệm vụ - bao gồm nó trong một số Rakefile hoặc trong chính nó dưới lib / task:

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

Giờ đây, bạn có thể chạy điều này cho tất cả các kiểu máy (được định nghĩa trong RAIS_ROOT / app / models) bằng cách sử dụng rake reset_sequences hoặc cho một mô hình cụ thể bằng cách chuyển vào một tên lớp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn bảng chéo PostgreSQL

  2. lỗi node-postgres $ 1 IS NULL

  3. SQLAlchemy và Postgres UnicodeDecodeError

  4. Làm cách nào để thực thi nhiều câu lệnh trong một truy vấn với Rails?

  5. PHP Postgres:Lấy ID Chèn Cuối cùng