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

时间:2015-02-01 11:01:30

标签: 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.

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

1 个答案:

答案 0 :(得分:5)

我已将char(24)与约束CHECK decode(mongo_id::text, 'hex'::text) > '\x30'::bytea一起使用。虽然此约束不检查ObjectId的完整性,但它仅允许存储有效格式。这将ObjectId存储为纯文本,这使得值易于读取。

其他选项可以是为列使用bytea类型,并将数据输入为"\xOBJECT_ID",其中\x将OBJECT_ID的文本形式转换为字节数组。这比char(24)占用更少的空间(如果你有数百万行可能是相关的),但访问非二进制格式的值需要使用例如。 encode(mongo_id::bytea, 'hex')(可能很累赘)。

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

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