在rails 3.2
app的pg 9.3数据库中,表engine_configs不断丢失主键(id)及其索引。这是表格:
对于上面显示的表,我们再次添加了主键,它显示的是列ID而不是串行的整数。上周,我们手动重新创建了表上的密钥和索引,并验证了这些密钥和索引确实存在。在我们发现主键和索引再次丢失之前,表上只有少数pg_dump
和pg_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时,那么恢复的副本就可以了。
答案 0 :(得分:1)
我最近遇到了同样的问题并使用pg:reset
来解决它。我从Getting "Unknown primary key for table" while the ID is there找到了解决方案。我使用的是heroku pgbackups:restore
,它删除了主键,直到我使用pg:reset
删除了数据库。