Jeff和others让我确信GUID比自动增加ID更可取。我有一个Postgres数据库,由自动增量ID索引,所以我想“重构”索引到UUIDs。除了编写遍历表的函数以及检查表中的索引匹配之外,还有一些通用(或特定)方法吗?
更新
答案 0 :(得分:2)
我无法找到任何可以自动执行此操作的内容,因此您可以自行决定。世界仍然需要数据库开发人员的好事,嗯?
可以说,最好的方法是将整个更改编写出来。创建该脚本的最佳方法可能是使用另一个脚本或工具(编写代码的代码),这似乎不适用于此特定方案。当然,每一个都增加了必须构建和测试的另一层软件。如果我认为我想要重复这个过程一段时间,或者需要某种程度的审计跟踪(例如更改脚本),我可能会咬紧牙关并编写编写此脚本的脚本。
如果这真的只是一次性交易,并且您可以在执行此操作时阻止数据库访问,那么可以节省时间和精力来手动进行更改,就像您最初开发数据库时一样。通过这个,我的意思是通过您首选的方法(图表,SQL DDL等)添加UUID列,填充数据(可能使用ad-hoc SQL DML),设置键和约束,然后最终删除旧的外键和列(再次,使用您喜欢的任何方法)。
如果您有多个环境(dev,test,prod),您可以在dev中执行此操作,然后使用DB比较工具编写更改脚本,但您需要编写新的FK值脚本。
示例
这是一个working script example on SQL Fiddle,虽然它在SQL Server(我最简单的数据库)中,只是为了让你了解你需要编写什么(不幸的是,不是如何)。它仍然不是完全一致的事务,因为有人可以在一个特定的操作中修改某些内容。
我意识到这绝不是一个完整的答案,所以请随意投票给我(并提供更好的答案)。
祝你好运,这实际上是一个有趣的问题。