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

时间:2014-07-04 06:41:42

标签: postgresql hash

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

oid char(30) primary key using hash

primary key(oid) using hash

1 个答案:

答案 0 :(得分:12)

我认为,您打算使用hash index method / type

主键为constraints某些约束可以创建索引以便正常工作(但不应依赖此事实)。 F.ex. UNIQUE约束将创建唯一索引。请注意,仅B树目前支持唯一索引PRIMARY KEY约束是UNIQUENOT NULL约束的组合,因此(当前)它只支持B树。

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

CREATE INDEX name ON table USING hash (column);

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

  

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

此外:

  

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

注意:遗憾的是,oid不是PostgreSQL中列的最佳名称,因为它也可以是system column and type的名称。

注意2 char(n) type also discuraged。您可以使用varchartext代替CHECK约束 - 或者(如果id类似于uuid)uuid type本身。