在** SQL DB中将自动递增ID重构为GUID

时间:2012-09-20 14:23:28

标签: sql postgresql guid uuid refactoring-databases

Jeffothers让我确信GUID比自动增加ID更可取。我有一个Postgres数据库,由自动增量ID索引,所以我想“重构”索引到UUIDs。除了编写遍历表的函数以及检查表中的索引匹配之外,还有一些通用(或特定)方法吗?

更新

  • 注意:数据库目前尚未投入生产,因此性能和事务完整性不会出现问题。

1 个答案:

答案 0 :(得分:2)

我无法找到任何可以自动执行此操作的内容,因此您可以自行决定。世界仍然需要数据库开发人员的好事,嗯?

可以说,最好的方法是将整个更改编写出来。创建该脚本的最佳方法可能是使用另一个脚本或工具(编写代码的代码),这似乎不适用于此特定方案。当然,每一个都增加了必须构建和测试的另一层软件。如果我认为我想要重复这个过程一段时间,或者需要某种程度的审计跟踪(例如更改脚本),我可能会咬紧牙关并编写编写此脚本的脚本。

如果这真的只是一次性交易,并且您可以在执行此操作时阻止数据库访问,那么可以节省时间和精力来手动进行更改,就像您最初开发数据库时一样。通过这个,我的意思是通过您首选的方法(图表,SQL DDL等)添加UUID列,填充数据(可能使用ad-hoc SQL DML),设置键和约束,然后最终删除旧的外键和列(再次,使用您喜欢的任何方法)。

如果您有多个环境(dev,test,prod),您可以在dev中执行此操作,然后使用DB比较工具编写更改脚本,但您需要编写新的FK值脚本。

示例

这是一个working script example on SQL Fiddle,虽然它在SQL Server(我最简单的数据库)中,只是为了让你了解你需要编写什么(不幸的是,不是如何)。它仍然不是完全一致的事务,因为有人可以在一个特定的操作中修改某些内容。

我意识到这绝不是一个完整的答案,所以请随意投票给我(并提供更好的答案)。

祝你好运,这实际上是一个有趣的问题。