В определениях первичных и вторичных индексов отсутствует определенная точность.
Использование двух популярных университетских текстов для справки:
Основы систем баз данных, Elmasri & Navathe определяет их как:
Первичный индекс в качестве индекса для упорядоченного файла, где ключ поиска совпадает с ключом сортировки
Вторичный индекс предоставляет вторичные средства доступа к файлу данных, для которого уже существует некоторый первичный доступ. Записи файла данных могут быть упорядочены, неупорядочены или хэшированы.
Системы баз данных: полная книга, Garcia-Molina et. al определяет их как:
Первичный индекс определяет местоположение записей файла данных
Вторичный индекс отличается от первичного индекса тем, что вторичный индекс не определяет размещение записей в файле данных. Скорее вторичный индекс сообщает нам текущее местоположение записей; это местоположение может быть определено первичным индексом в каком-либо другом поле
Некоторые свойства, которые справедливы для любого из приведенных выше определений:
- первичные ключи могут быть первичными индексами
- может быть не более 1 первичного индекса на таблицу
- первичные индексы однозначно определяют, где запись хранится в физической памяти.
- Все остальные индексы классифицируются как вторичные.
Однако, если размещение записей в файле данных не определяется каким-либо полем, тогда нельзя создать первичный индекс.
Таким образом, для отсортированных файлов имеет смысл поговорить о первичном индексе (который будет списком полей, на которых основана сортировка). Я не могу найти другие примеры физических файловых структур, в которых можно построить первичный индекс.
Postgresql использует структуру кучи для физического хранения записей. Кучи не сортируются (каламбур: они сортируются). Поэтому даже первичные ключи реализованы с использованием вторичных индексов, и поэтому все индексы в Postgresql являются вторичными.
Другие системы RDBMS do реализуют форматы хранения, поддерживающие первичные индексы:
Язык в документации Postgres неточный.
Все индексы в PostgreSQL являются вторичными индексами
Это правда.
означает, что каждый индекс хранится отдельно от основной области данных таблицы
Это не то, почему все индексы являются вторичными в Postgresql. Первичные индексы также могут храниться отдельно от основной области данных таблицы.