Postgresql:对多列主键的排序顺序

问题描述 投票:1回答:1

请考虑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个索引。我希望第一个索引可以被主键约束重用。

postgresql sorting indexing primary-key
1个回答
0
投票

我想你需要那个索引来支持ORDER BY,对吧?我想不出一个WHERE条件,它需要第二列按降序排序。

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

因此,除非你有一个检查约束的工具,否则如果它找不到任何约束就会失败,或者你需要INSERT ... ON CONFLICT的约束,在我看来索引足够好了。

© www.soinside.com 2019 - 2024. All rights reserved.