- 我将我的 mysql 数据库迁移到 postgres,现在它看起来像 Sql 服务器和 mysql,我们可以在其中更改数据类型并应用 autoincremet 新的 recorset 将获得增量值 自动。
- 但在 postgres 中不会发生自动递增,存在一些繁琐的解决方法,但旧值的重复是 仍然是一个曲线球要击中
- 是否有一些线性的方式来保留和 自动应用增量主键值 ?
最佳答案
- 不幸的是,目前似乎没有直接的方法来实现 有效的迁移场景。
但是,我通过下面的 sql 脚本实现了预期的结果。
--create new column to create sequences
alter table modnames add id serial;
---update new column serial column with existing value
UPDATE modnames m
SET id = m0.modnameid
FROM modnames m0
where m.modnameid=m0.modnameid
---now tricky part is to tell new serial to start from max(existingid) for referential integrity
--scenarios
---to figure out your serial sequence
SELECT adsrc FROM pg_attrdef WHERE adrelid = (SELECT oid FROM pg_class WHERE relname = 'table name goes here');
--and apply new set of serial sequences
Select setval('modnames_id_seq', (select max(modnameid)+1 from modname), false)
--test you applications
INSERT INTO public.modnames
(mname, modnameid, createdat, updatedat, recordstate)
VALUES('new entry set ', 0, now(), now(), 'active'::character varying);
--to find serial sequences
--delete old column and rename the older to new one
ALTER TABLE modnames RENAME COLUMN id TO modnameid;
关于mysql - 在 mysql 迁移到 postgres 后重新启动主键序列,最重要的是为参照完整性方面保留旧数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44114199/