有没有办法使用哈希方法创建主键?以下两个陈述都不起作用:
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约束是的组合UNIQUE和NOT 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.您可以使用varchar或text替代使用CHECK约束 - 或者(如果id类似于uuid)uuid类型本身.