MySQL to Postgres数据迁移

时间:2014-09-19 00:54:54

标签: mysql ruby-on-rails ruby-on-rails-3 postgresql

我正在将Ruby on Rails应用程序从MySQL迁移到Postgres。是否有建议的方法来保留已删除的数据,就像MySQL中所有已删除的记录(至少是他们的ID)一样?

在测试中,转储和恢复似乎没有保留已删除的记录。

另外,如果我设法将记录保存在原来的位置,那么Postgres中的空白记录会发生什么?它们会被跳过或使用吗?

示例

假设我的user ID为101,我已将users删除至100。我需要101留在101

1 个答案:

答案 0 :(得分:2)

因此,您不想重新分配分配给您生成密钥的记录的ID。

这应该是任何理智迁移的默认设置。当您复制数据行时 - 例如,使用SELECT ... INTO OUTFILE从MySQL导出并使用COPY tablename FROM 'filename.csv' WITH (FORMAT CSV)导入PostgreSQL时,ID将不会更改。

您需要做的就是设置PostgreSQL表中序列中生成的下一个ID。所以,假设你有桌子:

CREATE TABLE users
(
    id serial primary key,
    name text not null,
    ...
);

您刚刚将id = 101的用户复制到其中。

您现在只需为表格的密钥生成序列分配一个新值,例如:

SELECT setval('users_id_seq', (SELECT max(id) FROM users)+1);

要了解有关PostgreSQL中序列和密钥生成的更多信息,请参阅SERIAL in the numeric types documentationCREATE SEQUENCE的文档,setval的文档等。密钥生成序列的默认名称为tablename_columnname_seq