我正在处理256位ID(区块链哈希)。为了节省空间,我决定128bits的唯一性就足够了,因此我将散列拆分:
hash_id BYTEA NOT NULL,
hash_rest BYTEA NOT NULL,
hash_id
是我的主键,hash_rest
只是附加数据。这样,其他列只能通过16个字节而不是32个字节来引用此表。
但是,我想可靠地检测一种情况,在这种情况下,我将尝试插入我的假设(128位前缀是唯一的)无法尝试的数据。我在想类似的东西:
INSERT INTO ... ON CONFLICT (hash_id) DO ASSERT hash_rest = EXCLUDED.hash_rest
如果甚至有实现的方法,那么下一步的挑战是...我可能需要将该约束与现有约束结合使用(有时我会用ON CONFLICT (hash_id) DO UPDATE timestamp = now()
更新一些时间戳。