sql - 将自动增量 id 重构为 **SQL DB 中的 GUID

标签 sql postgresql guid uuid refactoring-databases

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

更新

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

最佳答案

我找不到任何可以自动为您执行此操作的东西,因此看来需要您来执行此操作。好消息是世界仍然需要数据库开发人员,不是吗?

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

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

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

示例

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

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

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

关于sql - 将自动增量 id 重构为 **SQL DB 中的 GUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12514736/

相关文章:

sql - Teradata:选定的非聚合值必须属于关联组的一部分

sql - Oracle 分区修剪与绑定(bind)变量

java - Spring:如何在 PostgreSQL 中使用 KeyHolder

postgresql - 无法从 golang 连接到 docker postgres 容器

c# System.guid 不包含 Parse 的定义

c# - 比较基于散列的 GUID 与“Guid.NewGuid()”时是否有更大的碰撞机会?

sql - 使用选择查询更新表

sql - 当用户的 SQL Server 密码过期时,从 VBA 执行 sp_password(存储过程)

SQL:选择最常出现的对应于不同列的值

sql - SQL Server中的GUID是什么数据类型?