Короткий вопрос
Каков порядок списка по умолчанию, возвращаемый вызовом фильтра Django при подключении к базе данных PostgreSQL?
Предыстория
По моему собственному признанию, я сделал неверное предположение на прикладном уровне о том, что порядок, в котором возвращается список, будет постоянным, т.е. используя 'order_by'. Список элементов, которые я запрашивал, не в алфавитном порядке или в каком-либо другом преднамеренном порядке. Считалось, что они останутся в том же порядке, в котором они были добавлены в базу данных.
Это предположение было верным для сотен запросов, но мое приложение сообщило об ошибке, когда порядок непреднамеренно изменился. Насколько мне известно, ни одна из этих записей не была затронута за это время, поскольку я единственный человек, который поддерживает БД. Чтобы добавить путаницы, при запуске приложения Django в Mac OS X оно по-прежнему работало, как и ожидалось, но в Win XP оно изменило порядок. (Обратите внимание, что упомянутые сотни запросов были на Win XP).
Любое понимание этого было бы полезно, поскольку я не смог найти ничего в документации Django или PostgreSQL, объясняющей различия в операционных системах.
Пример звонка
required_tests = Card_Test.objects.using(get_database()).filter(name__icontains=key)
РЕДАКТИРОВАТЬ
Поговорив сегодня с одним из моих коллег, я пришел к тому же ответу, что и Бьорн Линдквист.
Оглядываясь назад, я определенно понимаю, почему это так часто делается неправильно. Одним из преимуществ использования ORM Django, sqlalchemy или чего-либо еще является то, что вы можете писать команды без необходимости знать или понимать (подробно) базу данных, к которой она подключена. Признаюсь, я был одним из таких пользователей. Однако оборотной стороной этого является то, что без детального знания базы данных ошибки отладки, подобные этой, довольно неприятны и потенциально катастрофичны.