RoR API - когда я переключаю db с sqlite на postgres, все обновленные объекты в массиве API перемещаются в конец массива - PullRequest
1 голос
/ 20 сентября 2019

Когда я обновляю объект в своем sqlite API с помощью ajax, он сохраняет порядок моего массива объектов - поэтому внешний вид выглядит одинаково.Когда я обновляю объект в API после переключения базы данных на postgres, он меняет порядок массива - в основном размещая обновленные объекты в конце массива.Есть идеи, что здесь происходит?

Я пытался удалить и переделать базу данных, не повезло.Я переключился обратно на sqlite и снова работает нормально.

Ответы [ 2 ]

3 голосов
/ 20 сентября 2019

В порядке SQL не гарантируется.Если вам нужен конкретный порядок, безопаснее всего добавить ключ сортировки в свои записи и убедиться, что вы делаете ORDER BY в своем операторе select.

Тот факт, что SQLite сохраняетВаш заказ является своего рода «ошибкой» реализации.Вы не должны полагаться на двигатель, чтобы делать что-либо за пределами спецификации.

2 голосов
/ 20 сентября 2019

Цитата из Postgres docs :

После того, как запрос сгенерировал выходную таблицу (после обработки списка выбора), он может быть дополнительно отсортирован.Если сортировка не выбрана, строки будут возвращены в неуказанном порядке.Фактический порядок в этом случае будет зависеть от типов планов сканирования и соединения и порядка на диске, но на него нельзя полагаться.Конкретный порядок вывода может быть гарантирован только при явном выборе шага сортировки.

При этом без явного предложения ORDER порядок возвращаемых записей является случайным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...