sql >> データベース >  >> RDS >> PostgreSQL

postgresqlnextvalは既存の値を生成します

    reset_pk_sequences!があります Postgresアダプターのメソッド 。あなたはそれを呼び出すことができ、それはそれをmax(id)+ 1に設定します、それはおそらくあなたが望むものです。

    一部のプロジェクトでは、すべてのモデルまたは指定されたモデルに対してこれを実行するためのレーキタスクを保証するのに十分な頻度でデータをETLで取得します。タスクは次のとおりです。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
    

    これで、rake reset_sequencesを使用して、すべてのモデル(RAIS_ROOT / app / modelsで定義)に対してこれを実行できます。 、またはクラス名を渡すことで特定のモデルの場合。



    1. PostgreSQLで日付を作成するのに年、月、日かかる関数はありますか?

    2. 日付をMYSQL日付形式に変換する

    3. Codeigniter Active Record-制限付きで見つかった行の総数をカウントする(MySQL)

    4. エラーをスローせずにMySQLデータベースのエントリの重複を回避する方法