代码之家  ›  专栏  ›  技术社区  ›  Emmanuel Guiton

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

  •  1
  • Emmanuel Guiton  · 技术社区  · 6 年前

    考虑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为上述定义生成了两个索引。我希望第一个索引可以被主键约束重用。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Laurenz Albe    6 年前

    我想你需要这个索引来支持 ORDER BY 正当 我想不出什么好办法 WHERE 要求第二列按降序排序的条件。

    因为这两列都已定义 NOT NULL ,唯一索引的行为就像主键约束一样,可以用作外键约束的目标。

    所以,除非你有一个工具,可以检查约束,如果找不到约束,就会失败,或者你需要约束来解决问题 INSERT ... ON CONFLICT ,在我看来,拥有指数已经足够好了。