为什么postgres 9.3表不断丢失主键和索引?

时间:2014-06-22 20:37:58

标签: ruby-on-rails database postgresql indexing

rails 3.2 app的pg 9.3数据库中,表engine_configs不断丢失主键(id)及其索引。这是表格:

table engine_configs

对于上面显示的表,我们再次添加了主键,它显示的是列ID而不是串行的整数。上周,我们手动重新创建了表上的密钥和索引,并验证了这些密钥和索引确实存在。在我们发现主键和索引再次丢失之前,表上只有少数pg_dumppg_restore。没有数据库崩溃或类似的东西。有没有解释为什么会发生这种情况以及如何防止它再次发生?这个问题真的搞砸了我们的应用程序。

更新:

这是rails db create:

class CreateAuthentifyEngineConfigs < ActiveRecord::Migration
  def change
    create_table :authentify_engine_configs do |t|
      #t.integer     :client_id
      t.string      :engine_name
      t.string      :engine_version
      t.string      :argument_name
      t.text        :argument_value
      t.integer     :last_updated_by_id
      t.timestamps
      t.string      :brief_note
      t.boolean :global, :default => false

    end

    add_index :authentify_engine_configs, :engine_name
    add_index :authentify_engine_configs, :argument_name
    add_index :authentify_engine_configs, [:engine_name, :argument_name], :name => :authentify_engine_configs_names
  end
end

此迁移文件已多次与sqlite3一起使用,从未出现任何问题。

UPDATE1: 在pg_dump -Fc --table=authentify_engine_configs mydb > mydb_ec.backup之后,然后使用以下内容恢复:

pg_restore --clean --dbname=mydevdb --table=authentify_engine_configs --verbose c:\d\code\rails_proj\cis\db\mydb_ec.backup

恢复的本地副本丢失了索引。但是当pg_dump整个db时,那么恢复的副本就可以了。

1 个答案:

答案 0 :(得分:1)

我最近遇到了同样的问题并使用pg:reset来解决它。我从Getting "Unknown primary key for table" while the ID is there找到了解决方案。我使用的是heroku pgbackups:restore,它删除了主键,直到我使用pg:reset删除了数据库。