在 postgres 中的 select(或插入)查询期间,如何将 UUID 转换为 UUID5?

How can I transform a UUID to a UUID5 during select (or insert) queries in postgres?

有没有办法在现有的 postgres 数据集中将 UUID 转换为 UUID5?

我有一个 master/slave 设置,其中包含 pglogical 复制特定的 table 和列。我需要将此复制数据的访问权限授予第三方,但我想尽可能匿名。

table 中的每一行都使用 UUID(在代码中生成)作为主键,但为了确保匿名,我需要确保主键和复制的主键 table s 是单向转换的,使回溯更难。一些复制的 tables 也相互引用,这意味着我不能只排除这些列 - 值需要在 tables 之间匹配。 希望到目前为止这是有意义的...

有没有办法使用 uuid-osspuuid_generate_v5() 本质上使用现有的 UUID 作为 v5 UUID 的命名空间,将视图中的那些返回给第三方(或者甚至使用在复制期间转换特定列)?

我有点难过。如果我能在 postgres 中完全排序,我就不必在允许第三方访问之前使用额外的工具来转换数据,我可以只给他们实时数据而不是批处理。但是,如果我需要涉及一些额外的代码,那么我想这还不是世界末日......

提前致谢!

只需向第三方提供只读视图(在单独的架构中)并将对它们的数据访问限制在这些视图(或架构)中。

然后可以使用如下查询定义视图:

SELECT uuid_generate_v5(t.uuid, 'custom-third-party'), t.a, t.b, ...
FROM ...

这样,您还可以向不同的第三方提供不同的 UUID,因为原始 UUID 在数据条目中应该是唯一的。

重写数据策略不会扩展,只会在不需要的地方增加开销。