我最近将我的rails应用程序迁移到PostgreSQL以便利用全文搜索。
由于迁移与迁移到新的webhost同时进行,迁移的步骤如下:
使用适当的database.yml文件在新服务器上部署应用程序和db:create/db:schema:load
MySQL转储数据仅来自现有的MySQL生产数据库
将数据导入PostgreSQL数据库
应用程序已成功运行,但在尝试向数据库添加新内容时出现问题。例如,当我运行rake任务更新我的twitter提要时:
PG::Error: ERROR: duplicate key value violates unique constraint "twitter_feeds_pkey" DETAIL: Key (id)=(3) already exists.
这也适用于所有其他模型,创建新文章,用户等。在开发过程中,我可以看到,发布insert语句n+1次将成功地保存记录,而不会出错。
我的问题是:如何告诉PostgreSQL开始从现有数据中顺序添加索引?
我读过
REINDEX
页,但不认为这是我真正想要的手术。 最佳答案
如果架构包含序列或序列列,则应将这些列重置为相应列中出现的最大值。(通常,您不应该从文件中导入序列,而应该给它们自动递增的自由。)
对于所有导入的表,应标识序列字段并对其运行以下代码。(将模式名替换为“sch”,将表名替换为“mytable”,将id列名替换为“id”)
WITH mx AS ( SELECT MAX(id) AS id FROM sch.mytable)
SELECT setval('sch.mytable_id_seq', mx.id) AS curseq
FROM mx
;