mysql - 在 mysql 迁移到 postgres 后重新启动主键序列,最重要的是为参照完整性方面保留旧数据

标签 mysql sql postgresql primary-key auto-increment

  1. 我将我的 mysql 数据库迁移到 postgres,现在它看起来像 Sql 服务器和 mysql,我们可以在其中更改数据类型并应用 autoincremet 新的 recorset 将获得增量值 自动。
  2. 但在 postgres 中不会发生自动递增,存在一些繁琐的解决方法,但旧值的重复是 仍然是一个曲线球要击中
  3. 是否有一些线性的方式来保留和 自动应用增量主键值 ?

最佳答案

  • 不幸的是,目前似乎没有直接的方法来实现 有效的迁移场景。

但是,我通过下面的 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/

相关文章:

mysql - 通过 SELECT 查询将 Alias 与 JSON_EXTRACT 结合使用

如果数据为 Null 或使用 CASE 语句为空,则 MySQl 查询 UPDATE

postgresql - postgres 插入带有选择大小写的表

php - mysql 左连接计数总是返回 1

java.lang.ClassNotFoundException : at jdbc. DatabaseAccess.doGet(DatabaseAccess.java:25)

mysql - 在单个 MySQL 列中分隔标签

php - 关系型 MySQL PHP

sql - 从函数返回的记录具有连接的列

sql - 在postgresql中连接数据

mysql - GROUP BY mySQL 语句