sql - 散列主键 postgresql
问题描述
所以我已经有一个表,但它没有主键 ID 列。我想用哈希创建列。所以现在我所做的是将列 (id) 创建为自增主键列,并尝试使用此查询对其进行散列:
CREATE index ON table USING hash (id)
但是,在我运行查询后,该列似乎没有任何变化,它仍然显示 1、2、3 ...
解决方案
请考虑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
用于其他哈希方法。
但是,一个缺点是增加了磁盘空间的使用。
我不确定是否有任何性能优势。
推荐阅读
- php - “从 PHP 调用 R 脚本时没有名为‘rmarkdown’的包”
- post - 从 API 获取数据
- powershell-3.0 - 为当前登录的用户执行测试路径
- java - 回调方法内的同步块
- javascript - 我们如何使用 MomentJS 将时间转换为给定格式
- python - Python - 如何按 LIST 中的下一个玩家的顺序调用
- excel - 从选择中在 Finder 中搜索
- pandas - 添加存储在数据框中的列表
- python - AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas
- javascript - 更改打印数字的输出格式