带ASC或DESC排序的主键?[英] Primary key with ASC or DESC ordering?

本文是小编为大家收集整理的关于带ASC或DESC排序的主键?的处理方法,想解了带ASC或DESC排序的主键?的问题怎么解决?带ASC或DESC排序的主键?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在尝试使用复合主键创建一个表,其中第二列按降序排列:

CREATE TABLE AccountHistory (                                                                                                                                                                           
  AccountNumber BIGINT NOT NULL,                                                                                                                                                                        
  Ts TIMESTAMP NOT NULL,                                                                                                                                                                                
  Memo TEXT,                                                                                                                                                                                            
  ChangeAmount BIGINT NOT NULL,                                                                                                                                                                         
  PRIMARY KEY (AccountNumber, ts DESC)                                                                                                                                                              
);

但是,PostgreSQL 说 DESC 子句存在语法错误.

  • PostgreSQL 真的不允许这样做吗?
  • 拥有这样的 DESC 键是否有意义?
  • 是我唯一的选择来创建具有我想要的语义的附加索引吗?

推荐答案

我认为这样做是合理的,因为在语义上升序或降序的索引是相同的,但 PostgreSQL 不支持它.无法控制为支持主键而自动创建的索引的索引顺序.

PostgreSQL 不会让你通过手动创建索引来创建索引,作为 DESC 排序顺序的 UNIQUE 索引,然后使用 ALTER TABLE ... ADD CONSTRAINT ... PRIMARY KEY USING INDEX ... 创建声明的 PRIMARY KEY 约束.它会失败:

ERROR:  index "foopk" does not have default sorting behavior

我不知道为什么 Pg 需要这个.在源代码中搜索上述错误可能会找到合适的注释.

您可以在没有约束元数据的情况下获得类似 PRIMARY KEY 的行为,只需单独创建唯一索引即可.这对你来说可能没问题.

本文地址:https://www.itbaoku.cn/post/1764031.html