Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL到Postgres的数据迁移_Mysql_Ruby On Rails_Ruby On Rails 3_Postgresql - Fatal编程技术网

MySQL到Postgres的数据迁移

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迁移中的默认值。当您在上面

我正在将RubyonRails应用程序从MySQL迁移到Postgres。有没有一种推荐的方法来保存被删除的数据,比如MySQL中所有被删除的记录(至少是它们的ID)

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

也就是说,如果我设法把记录保存在哪里,那么PiggRes中的空白会发生什么呢?它们会被跳过还是被使用

示例


假设我有一个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
键和PostgreSQL
SERIAL
列吗?我将用一个例子更新这个问题。哦,太好了!当我认为这可能是个问题时,我开始惊慌失措。我是否必须为每个表的键生成序列分别分配新值?@emm yes。我会亲自编写剧本。以上假设您正在将数据表作为CSV逐表迁移。如果您正在使用某种Rails级别的数据迁移,那么一切都可能不同。非常棒的帮助。非常感谢。