Почему Postgres возвращает только нечетные записи при поиске, включающем pkey?

PostgreSQL возвращает только нечетные записи при поиске, включающем первичный ключ (pkey), потому что каждая таблица в PostgreSQL имеет присвоенный ей первичный ключ, который уникально идентифицирует каждую строку в таблице. Первичный ключ (primary key) может включать одно или несколько полей, но обычно включает только одно поле, которое обеспечивает уникальность каждой записи в таблице.

Когда вы выполняете поиск, содержащий первичный ключ, PostgreSQL использует индекс для поиска требуемой записи. При использовании B-дерева, который является наиболее распространенной структурой данных для индексов в PostgreSQL, в поисковом дереве каждый индексный блок содержит указатели на нечетные записи. Это позволяет ускорить поиск, так как намного проще определить, куда двигаться по дереву при поиске конкретной записи.

При использовании операторов сравнения, таких как "равно" (=), "меньше" (<) или "больше" (>), PostgreSQL оптимизирует поиск, чтобы найти нужную запись как можно быстрее. Если нечетные записи содержат искомые значения, PostgreSQL возвращает только их, чтобы увеличить эффективность поиска и уменьшить количество операций ввода-вывода.

Однако, стоит отметить, что это поведение не является обязательным и зависит от различных факторов, включая выбранные индексы и конкретный запрос. Если, например, вы используете OR-оператор в запросе, PostgreSQL может возвращать и четные, и нечетные записи, если они удовлетворяют критериям поиска.

В целом, возвращение только нечетных записей при поиске, включающем первичный ключ, является оптимизацией, которую PostgreSQL выполняет для повышения производительности. Это может быть полезно в случаях, когда количество результатов поиска с использованием первичного ключа достаточно велико, и оптимизация поможет снизить нагрузку на сервер и время выполнения запросов. Однако, в зависимости от ваших конкретных требований, вы можете вручную изменить поведение запроса, чтобы возвращать и четные, и нечетные записи, если это необходимо для вашего приложения.