如何在postgresql中使用hash方法创建主键

Tom*_*Yeh 5 postgresql hash

有没有办法使用哈希方法创建主键?以下两个陈述都不起作用:

oid char(30) primary key using hash

primary key(oid) using hash
Run Code Online (Sandbox Code Playgroud)

poz*_*ozs 14

我假设你打算使用哈希索引方法/类型.

主键是约束.一些约束可以创建索引以便正常工作(但不应该依赖这个事实).F.ex. 一个UNIQUE约束将创建一个唯一索引.请注意,只有B树目前支持唯一索引.所述PRIMARY KEY约束是的组合UNIQUENOT NULL约束,所以(目前)只支持B-树.

如果需要,您也可以设置哈希索引(除了PRIMARY KEY约束) - 但是您不能使其唯一.

CREATE INDEX name ON table USING hash (column);
Run Code Online (Sandbox Code Playgroud)

但是,如果你愿意这样做,你应该知道哈希索引有一些限制(直到PostgreSQL 10):

哈希索引操作目前不是WAL记录的,因此如果存在未写入的更改,则可能需要在数据库崩溃后使用REINDEX重建哈希索引.此外,在初始基本备份之后,不会通过流式传输或基于文件的复制复制哈希索引的更改,因此它们会为随后使用它们的查询提供错误的答案.由于这些原因,目前不鼓励使用哈希索引.

也:

目前,只有B树,GiST和GIN索引方法支持多列索引.

注意:遗憾的是,oid它不是PostgreSQL中列的最佳名称,因为它也可以是系统列和类型的名称.

注2:char(n)类型也是discuraged.您可以使用varchartext替代使用CHECK约束 - 或者(如果id类似于uuid)uuid类型本身.

  • 自PostgreSQL 10以来,哈希索引操作已进行WAL记录. (4认同)