我正在将Ruby on Rails应用程序从MySQL迁移到Postgres。是否有建议的方法来保留已删除的数据,就像MySQL中所有已删除的记录(至少是他们的ID)一样?
在测试中,转储和恢复似乎没有保留已删除的记录。
另外,如果我设法将记录保存在原来的位置,那么Postgres中的空白记录会发生什么?它们会被跳过或使用吗?
示例
假设我的user
ID为101
,我已将users
删除至100
。我需要101
留在101
。
答案 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 documentation,CREATE SEQUENCE
的文档,setval
的文档等。密钥生成序列的默认名称为tablename_columnname_seq
。