2

Jeff其他人让我相信 GUID 比自动增量 ID 更可取。我有一个由自动增量 id 索引的 Postgres 数据库,所以我想将索引“重构”为 UUID。除了编写遍历表的函数并检查表之间的索引匹配之外,是否还有一些通用(或特定)方法来执行此操作?

更新

  • 注意:数据库当前未投入生产,因此性能和事务完整性不是问题。
4

1 回答 1

2

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

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

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

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

一个例子

这是SQL Fiddle 上的一个工作脚本示例,尽管它位于 SQL Server(我最简单的数据库)中,只是为了让您了解必须编写什么脚本(不幸的是,不是如何编写脚本)。它在事务上仍然不完全一致,因为有人可以在一个特定操作期间修改某些东西。

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

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

于 2012-09-20T18:50:33.667 回答