我试图创建一个表,其中,第二列是有序的下降复合主键:使用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键有意义?
- 我唯一的选择是用我想要的语义创建一个额外的索引吗?
这根本没有意义。您在选择时指定您的订单,而不是在索引时指定。另外,为了使用索引,您需要先通过'AccountNumber'命令,然后按'ts'命令,否则排序效率不高。为了克服这个问题,只在'ts'上指定一个单独的索引。但是,您不能在索引上指定排序顺序,仅限于选择。 – Psi
@Psi你当然可以告诉postgresql索引列的顺序,这在很多情况下非常有意义,例如'create index myindex(AccountNumber,ts DESC)'在postgresql中有效,但我不确定是否它可以在主键上完成。 – nos
@nos你可以自己指定索引列的顺序(例如'col B',然后'col A'),但是对于我来说这完全没有意义,为什么你可以颠倒特定列的索引顺序。另外我不明白你为什么要这样做,因为你想要选择而不是定义索引。您只能按升序或降序进行排序,这只是从开始或结束(然后向后)读取索引,因此不需要指定任何顺序来存储索引。 – Psi