Гарантирован ли порядок просмотра? - PullRequest
0 голосов
/ 14 февраля 2019

PostgreSQL позволяет ORDER BY в представлениях, поэтому, например, я могу написать представление следующим образом:

CREATE VIEW people_overview AS
SELECT
    id
  , name1
  , name2
FROM person
ORDER BY
    name2
  , name1

Допустим, у меня есть приложение, в котором я теперь использую это представление следующим образом:

SELECT * FROM people_overview

Затем приложение читает все данные и каким-то образом отображает их пользователю, например, с помощью сетки.

Гарантируется ли, что в этой ситуации порядок, указанный в представлении, сохраняется при получениистроки в приложении?

Или мне лучше кодировать ORDER BY в приложении?

1 Ответ

0 голосов
/ 14 февраля 2019

согласно комментариям;определить представление без ORDER BY (если только для некоторых подзапросов это не требуется для целей типа TOP N ROWS) и позволить конечному пользователю представления определить порядок сортировки, который они хотят (так как тогда гарантированно будет то, что они хотят, и при этом будет меньше риска, чтоданные будут отсортированы дважды, один раз без необходимости - оптимизатор должен понимать, что упорядочение в представлении избыточно, если применяется select * from view order by x, но нет особого смысла рисковать / вводить лишний код в беспорядок).

Возможно, я бы также расширил эту философию на такие вещи, как преобразование / форматирование данных - оставить данные в сохраненной форме, чтобы они оставались полезными как можно дольше, и позволяющее вызывающему приложению принимать решение о форматировании (т.е.не форматируйте все даты в строку yyyyMMdd в вашем представлении, если вызывающее приложение должно будет снова проанализировать его, чтобы выполнить некоторые математические операции и т. д.)

...