如何在Heroku上重置Postgresql表的ID序列

我的数据库中有一个“企业”表,该表是通过使用第三方应用程序手动加载数据来填充的。结果,id序列被弄乱了,在尝试创建新记录时收到id = null错误消息。

Heroku支持人员建议我使用heroku pg:psql -a app_name,然后从那里去。

但是我不确定如何从那里实际进行。我尝试了:pg_set_serial_sequence('entreprises','id'),但也遇到了一个错误:没有函数匹配给定的名称和参数类型。...

我不认为这不是一项艰巨的任务,不确定为什么Heroku的支持不能提供完整的解决方案。

cengyicang 回答:如何在Heroku上重置Postgresql表的ID序列

只需登录到Postgres服务器或使用std::find或任何其他Postgres GUI工具连接数据库,然后在查询窗口中运行以下命令。

pgadmin

这将从您的表中删除所有记录。

,
  1. 连接到heroku控制台

    heroku run rails c -app app_name
    
  2. 运行以下代码

    ActiveRecord::Base.connection.reset_pk_sequence!('entreprises')
    
,

没有一种解决方案对我有用,尤其是不能使我删除整个表的解决方案。我选择了另一种方法,即将所有表传递到UUID并将old_id保存到其他表中:

class ResetIdOfEntreprise < ActiveRecord::Migration[5.1]
  def change
    add_column :entreprises,:uuid,default: "uuid_generate_v4()",null: false
    add_column :entreprises,:old_id,:integer
    Entreprise.update_all("old_id=id")

    change_table :entreprises do |t|
      t.remove :id
      t.rename :uuid,:id
    end
    execute "ALTER TABLE entreprises ADD PRIMARY KEY (id);"
  end
end
本文链接:https://www.f2er.com/3167864.html

大家都在问