【问题标题】:Refactoring Auto-increment ids to GUIDs in **SQL DB将自动增量 ID 重构为 **SQL DB 中的 GUID
【发布时间】:2012-09-12 22:39:21
【问题描述】:

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

更新

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

【问题讨论】:

  • 我认为您必须编写自己的自定义脚本才能执行此操作。根据您拥有的表格数量,编写和测试此脚本可能比仅在编辑器中手动进行更改需要更长的时间。
  • 手动更改每一行?!我需要很多猴子才能做到这一点。
  • 对于我的评论不清楚,我深表歉意。我将表数作为估计更改范围的一种可能性。我没有说行、记录、元组或数据。我也不建议使用编辑器来打开数据库表和进行数据更改,就好像它们是电子表格一样。我提到编辑器就像在 IDE 中一样,例如 phpPgAdmin、Toad、SSMS 等。
  • 没问题,那么从 IDE 中“手动”进行的更改是什么,这与编写脚本有什么不同?我只是想了解你在这里的建议。

标签: sql postgresql guid uuid refactoring-databases


【解决方案1】:

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

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

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

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

一个例子

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

我知道这绝不是一个完整的答案,所以请随时投票否决我(并提供更好的答案)。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多