Вы строите на неправильном предположении, что вы получите строки в неопределенном порядке с:
SELECT * FROM users;
Что вы получаете действительно произвольно. Postgres возвращает строки так, как считает нужным. Для простых запросов обычно в порядке их физического хранения, который обычно представляет собой порядок ввода строк. Но никаких гарантий нет, и он может меняться в любое время между двумя вызовами, например, когда фоновый процесс переупорядочивает строки - например, VACUUM
. Или более сложный запрос может возвращать строки в соответствии с индексом или объединением. Короче говоря: есть нет надежного заказа для строк таблицы в реляционной базе данных, если вы не указали его с ORDER BY
.
Тем не менее, если вы получите строки из приведенного выше простого запроса в порядке физической памяти, это заставило бы вас в обратном порядке:
SELECT * FROM users
ORDER BY ctid DESC;
ctid
является внутренним кортежем ID обозначающих физическим заказ. Связанный:
Нет, это не так просто, так как нет начального порядка *; order undefined (без предложения ORDER BY) – wildplasser