PostgreSQL:多列主键上的排序顺序

时间:2018-09-14 13:40:35

标签: postgresql sorting indexing primary-key

在PostgreSql数据库中考虑以下表定义:

CREATE TABLE data (
    id bigint NOT NULL, 
    updateRound timestamp WITH time zone NOT NULL
);

CREATE UNIQUE INDEX idx_unique_data ON data (id, updateRound DESC);
ALTER TABLE data ADD CONSTRAINT pk_data PRIMARY KEY (id, updateRound);

此代码创建2个索引,而1个索引应足够。但是,我不能在主键定义上添加排序顺序。如果我离开一张没有主键的桌子,我会感到内。

什么是最好的方法?

编辑:PostgreSql多列索引排序以供参考:https://www.postgresql.org/docs/current/static/indexes-ordering.html

编辑2:Primary key with ASC or DESC ordering?中的详细说明。但是,我知道PostgreSql不接受对主键约束的排序:只能对索引进行排序。但是当涉及到实现时,PostgreSql为上述定义生成2个索引。我希望主索引约束可以重用第一个索引。

1 个答案:

答案 0 :(得分:0)

我想您需要该索引来支持ORDER BY,对吗? 我想不到WHERE条件会要求第二列以降序排列。

由于两列都定义为NOT NULL,所以唯一索引的行为就像主键约束一样,并且可以用作外键约束的目标。

因此,除非您有一个检查约束的工具,如果找不到约束,否则该工具将失败,或者除非您需要INSERT ... ON CONFLICT的约束,否则我认为拥有索引就足够了。