有没有办法使用哈希方法创建主键?以下陈述都不起作用:
oid char(30) primary key using hash
primary key(oid) using hash
答案 0 :(得分:12)
我认为,您打算使用hash index method / type。
主键为constraints。 某些约束可以创建索引以便正常工作(但不应依赖此事实)。 F.ex. UNIQUE
约束将创建唯一索引。请注意,仅B树目前支持唯一索引。 PRIMARY KEY
约束是UNIQUE
和NOT 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。您可以使用varchar
或text
代替CHECK
约束 - 或者(如果id类似于uuid)uuid
type本身。