Postgresql: отсортированный порядок для многоколоночного первичного ключа - PullRequest
0 голосов
/ 14 сентября 2018

Рассмотрим следующее определение таблицы в базе данных 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: хорошие объяснения в Первичный ключ с порядком ASC или DESC? .Однако я знаю, что PostgreSql не допускает сортировку по ограничению первичного ключа: это можно сделать только для индекса.Но когда дело доходит до реализации, PostgreSql создает 2 индекса для приведенного выше определения.Я хотел бы, чтобы первый индекс мог быть повторно использован ограничением первичного ключа.

1 Ответ

0 голосов
/ 14 сентября 2018

Полагаю, вам нужен этот индекс для поддержки ORDER BY, верно? Я не могу вспомнить условие WHERE, которое потребовало бы второго столбца в порядке убывания.

Поскольку оба столбца определены NOT NULL, уникальный индекс будет вести себя так же, как ограничение первичного ключа, и его можно использовать в качестве цели ограничений внешнего ключа.

Так что, если у вас нет инструмента, который проверяет наличие ограничений и дает сбой, если он не может их найти, или вам нужно ограничение для INSERT ... ON CONFLICT, на мой взгляд, наличие индекса достаточно хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...