保存模型时出现Postgres错误

时间:2018-05-15 08:08:06

标签: ruby-on-rails postgresql

所以我搜索过并不能找到任何相关内容。如果有人能帮助我,我真的很感激

在rails中保存模型时,我一直收到此错误

  

PG :: UniqueViolation:错误:重复键值违反了唯一约束" addresses_pkey"

我没有任何索引addresses_pkey

我的猜测是某种方式主键计数器被破坏但不确定如何在Heroku上修复它。

2 个答案:

答案 0 :(得分:0)

似乎它正在尝试在地址表的主键中创建相同的值,这不应该发生。

作为解决方法,您还可以尝试以下命令:

rake db:drop
rake db:create 
rake db:migrate

对于Heroku

heroku pg:reset DATABASE_URL
heroku run rake db:setup

答案 1 :(得分:0)

问题是我导入了一些搞乱序列的数据,所以我使用这个rake任务重置了所有序列

 namespace :db do
  desc 'reset sequences for a specific table or all tables'
  task sequence_reset: :environment do
    sql = <<~SQL
      SELECT 'SELECT SETVAL(' ||
             quote_literal(quote_ident(PGT.schemaname) || '.' || quote_ident(S.relname)) ||
             ', COALESCE(MAX(' ||quote_ident(C.attname)|| '), 1) ) FROM ' ||
             quote_ident(PGT.schemaname)|| '.'||quote_ident(T.relname)|| ';' as query
      FROM pg_class AS S,
           pg_depend AS D,
           pg_class AS T,
           pg_attribute AS C,
           pg_tables AS PGT
      WHERE S.relkind = 'S'
          AND S.oid = D.objid
          AND D.refobjid = T.oid
          AND D.refobjid = C.attrelid
          AND D.refobjsubid = C.attnum
          AND T.relname = PGT.tablename
      ORDER BY S.relname;
    SQL

    ActiveRecord::Base.connection.execute(sql).each do |query|
      ActiveRecord::Base.connection.execute(query['query'])
    end
  end
end