postgresql 从数字ID迁移到UUID

j8yoct9x  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(1)|浏览(160)

我正在寻找任何提示和建议,当涉及到迁移从数字ID的UUID的在埃克托。
我有一个项目,有大量的关系,我不能简单地删除数据库,并重新创建它与UUID的,这似乎是一个最简单的解决方案,因为我必须保持数据。
我的想法是:
1.将:uuid, :uuid字段添加到表中
1.使用脚本和Ecto.UUID.generate()填充:uuid
1.将表格修改为(:some_table, primary_key: false),将字段修改为::uuid, :uuid, primary_key: true,并删除:id字段。
1.将:uuid字段重命名为:id
虽然在我看来它看起来很完美,但我当然忘记了引用。有没有什么方法可以轻松地处理引用,从数字ID到UUID的迁移?我想到的唯一想法是创建额外的表,其中将包含旧ID和新UUID之间的第2和第3步,然后删除旧引用并基于创建的表添加新引用。我将感谢任何建议:)

qf9go6mv

qf9go6mv1#

如果你有一个选项可以让数据库从外部进入只读状态一段时间,这应该不会太难。
1.删除所有外键约束
1.将:uuid, :uuid字段添加到表中
1.将表格修改为primary_key: false
1.将触发器置于UPDATE上,将 * 所有 * 引用表的fk值更新为插入值
1.使用类似gen_uuid()的DB过程填充:uuid
1.将:uuid设为主键(并删除:id
1.将:uuid字段重命名为:id
∞.将所有外键放回原位。
最好使用纯SQL(保存用于ecto模式更新)来完成整个工作。

相关问题