postgresql中mongo _id字段的最佳表示形式是什么?

Ski*_*Ski 9 postgresql

Mongodb _id字段定义为:

ObjectId is a 12-byte BSON type, constructed using:

a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id, and
a 3-byte counter, starting with a random value.
Run Code Online (Sandbox Code Playgroud)

postgresql中这个字段最有效的表示方式是什么?

Pet*_*epo 5

我已经习惯char(24)了约束CHECK decode(mongo_id::text, 'hex'::text) > '\x30'::bytea。尽管此约束不会检查ObjectId的完整性,但它仅允许存储有效格式。这将ObjectId以纯文本格式存储,从而使值易于阅读。

另一种选择是对bytea列使用type,并"\xOBJECT_ID"\x将OBJECT_ID的文本形式转换为字节数组的位置输入数据。所消耗的空间少于char(24)(如果您有数百万行,则可能是相关的),但是以非二进制格式访问值需要使用eg。encode(mongo_id::bytea, 'hex')(可能会很累)。

同样,某些平台(例如RedShift)可能会遇到bytea数据类型问题。

如果您需要轻松访问ObjectId中的元数据,则可以分别解析和存储它(例如,在jsonb每个相关属性的列或单独的列中)。可能是元数据的“创建于”部分是唯一有趣的属性。