MySQL到Postgres的数据迁移
我正在将RubyonRails应用程序从MySQL迁移到Postgres。有没有一种推荐的方法来保存被删除的数据,比如MySQL中所有被删除的记录(至少是它们的ID) 在测试转储和恢复时,似乎没有保留已删除的记录 也就是说,如果我设法把记录保存在哪里,那么PiggRes中的空白会发生什么呢?它们会被跳过还是被使用 示例MySQL到Postgres的数据迁移,mysql,ruby-on-rails,ruby-on-rails-3,postgresql,Mysql,Ruby On Rails,Ruby On Rails 3,Postgresql,我正在将RubyonRails应用程序从MySQL迁移到Postgres。有没有一种推荐的方法来保存被删除的数据,比如MySQL中所有被删除的记录(至少是它们的ID) 在测试转储和恢复时,似乎没有保留已删除的记录 也就是说,如果我设法把记录保存在哪里,那么PiggRes中的空白会发生什么呢?它们会被跳过还是被使用 示例 假设我有一个ID为101的用户,并且我已经删除了用户到100。我需要101停留在101以便您不想重新分配分配给生成密钥的记录的ID 这应该是任何sane迁移中的默认值。当您在上面
假设我有一个ID为
101
的用户
,并且我已经删除了用户
到100
。我需要101
停留在101
以便您不想重新分配分配给生成密钥的记录的ID
这应该是任何sane迁移中的默认值。当您在上面复制数据行时,例如,使用选择从MySQL导出。。。将表名导入OUTFILE
,并将表名从“filename.csv”复制到PostgreSQL中,格式为(csv),ID不会更改
您所需要做的就是在PostgreSQL表的序列中设置要生成的下一个ID。那么,假设你有一张桌子:
CREATE TABLE users
(
id serial primary key,
name text not null,
...
);
您刚刚复制了一个id为id
=101
的用户
现在只需为表的键生成序列分配一个新值,例如:
SELECT setval('users_id_seq', (SELECT max(id) FROM users)+1);
要了解有关PostgreSQL中的序列和密钥生成的更多信息,请参阅、的文档、的文档等。密钥生成序列的默认名称为
tablename\u columnname\u seq
如果数据被删除,它将不再存在于数据库中,因此您无法保留它。这没有道理。你说的是AUTO_INCREMENT
键和PostgreSQLSERIAL
列吗?我将用一个例子更新这个问题。哦,太好了!当我认为这可能是个问题时,我开始惊慌失措。我是否必须为每个表的键生成序列分别分配新值?@emm yes。我会亲自编写剧本。以上假设您正在将数据表作为CSV逐表迁移。如果您正在使用某种Rails级别的数据迁移,那么一切都可能不同。非常棒的帮助。非常感谢。