首页 > 解决方案 > 散列主键 postgresql

问题描述

所以我已经有一个表,但它没有主键 ID 列。我想用哈希创建列。所以现在我所做的是将列 (id) 创建为自增主键列,并尝试使用此查询对其进行散列:

CREATE index ON table USING hash (id)

但是,在我运行查询后,该列似乎没有任何变化,它仍然显示 1、2、3 ...

标签: sqlpostgresql

解决方案


请考虑The Impaler给出的答案。

我相信你想要实现的是改变你已经存在的id列的类型。此外,您必须更改 id 的默认值以获取每个新行的哈希 id。

CREATE TABLE test (
  id SERIAL NOT NULL PRIMARY KEY,
  label TEXT
);

INSERT INTO test (label) VALUES ('v1'), ('v2'), ('v3'), ('v4');

ALTER TABLE test ALTER COLUMN id TYPE text USING md5(id::TEXT);
ALTER TABLE test ALTER COLUMN id SET DEFAULT md5(nextval(pg_get_serial_sequence('test', 'id'))::TEXT);

INSERT INTO test (label) VALUES ('v5');

在这种情况下md5,您还可以digest将模块的功能pgcrypto用于其他哈希方法。

但是,一个缺点是增加了磁盘空间的使用。

我不确定是否有任何性能优势。


推荐阅读