LINUX.ORG.RU

PostgreSQL - просто так исчезла БД из списка

 


0

2

привет!
началось всё с того, что в одной из таблиц
список вида:

,('task_time',null,'★ВРЕМЯ')
,('task_time',900,'09:00')
,('task_time',915,'09:15')
,('task_time',930,'09:30')
,('task_time',945,'09:45')
,('task_time',1000,'10:00')
,('task_time',1015,'10:15')
,('task_time',1030,'10:30')
,('task_time',1045,'10:45')

который всегда выдавал SELECT именно в таком порядке, как он изначально прописан в sql-файле...
КАКОГО-ТО ХЕРА...
начал выдавать строчку
,('task_time',1030,'10:30')
в первой строке (перед той, где 'ВРЕМЯ')

а если эту строчку удалить
то выдаёт следующую за ней...
Я попробовал пересоздать таблицу и перезагрузить БД
а потом сделал:
VACUUM FULL;
ANALYZE;
VACUUM ANALYZE;

НЕ сработало, и тогда я перезагрузил сервер
и, О ЧУДО!
из списка баз исчезла ВСЯ эта БД...
(на диске, причём, файлы лежат)

опустим вопрос «а чё это было?»
сейчас важнее другое - можно ли просто пересоздать чистую БД и в неё переписать эти файлы?
чтобы по-простому и быстро всё вернуть



Последнее исправление: tip78 (всего исправлений: 4)
Ответ на: комментарий от tip78

ты чего-то недоговариваешь. используй вчерашний бекап значит. для очистки таблиц есть оператор truncate. таблица смахивает на какую-то джанга-парашу. посмотри логи. что пишет. гугли, пока не найдешь ответ

rtxtxtrx ★★★
()

SELECT именно в таком порядке

Порядок SELECT без ORDER BY (или с сортировкой по неуникальным кортежам) неопределён и может произвольно меняться от вставок, удалений, vacuum и т. д. В общем, он почти как ORDER BY RANDOM(), только ещё и не RANDOM (выдаёт один и тот же порядок много раз подряд, пока ЧТО-ТО не случится).

Добавляй auto increment колонку и делай ORDER BY по ней. Или делай колонку created_at timestamp default current_timestamp и сортируй по ней.

KivApple ★★★★★
()
Ответ на: комментарий от KivApple

там нету никаких вставок в эти таблицы
они как загружены из файла, так и живут годами
это справочники
и всегда они выдаются в том порядке, в каком были созданы

tip78
() автор топика
Ответ на: комментарий от tip78

выдаются в том порядке, в каком были созданы

Это UB.

Если у тебя в SELECT нет ORDER BY – никакого определённого порядка выдачи ты ждать не имеешь права.

hobbit ★★★★★
()

началось всё с того, что в одной из таблиц список вида:

который всегда выдавал SELECT именно в таком порядке, как он изначально прописан в sql-файле…

опустим вопрос «а чё это было?»

и правда, с такими вводными может быть всё, что угодно.

anonymous
()
Ответ на: комментарий от anonymous

слушай, я бы понял, если бы было, что угодно
но когда вылазит конкретная строка
которая за годы (НИ В ОДНОМ СПРАВОЧНИКЕ) никогда НЕ вылезала
при этом, даже если её закомментить, то сразу вылезет следующая
когда во всех остальных справочниках всё идеально
то
я это записываю в баги
как минимум, в отклонение от нормы

tip78
() автор топика
Последнее исправление: tip78 (всего исправлений: 1)
Ответ на: комментарий от tip78

я это записываю в баги

У тебя проблема с чтением документации. СУБД не обязана тебе выводить строки в предсказуемом порядке, если не указаны поля для сортировки.

After a query has produced an output table (after the select list has been processed) it can optionally be sorted. If sorting is not chosen, the rows will be returned in an unspecified order. The actual order in that case will depend on the scan and join plan types and the order on disk, but it must not be relied on. A particular output ordering can only be guaranteed if the sort step is explicitly chosen.

anonymous
()
Ответ на: комментарий от anonymous

да это просто отмазка
снятие ответственности
мол, мы ничего не гарантируем
НО, по факту, никогда такого не было
это отклонение от нормы
и у этого отклонения должна быть причина
понимаешь?

tip78
() автор топика
Последнее исправление: tip78 (всего исправлений: 1)
Ответ на: комментарий от tip78

Вы ведь даже примерно не представляете как внутри БД работает? Там такие оптимизации есть, которые могут вот так порядок вывода шатать легко. О том что порядок вывода не определён если нет ORDER BY написано на первых 10 страницах любого учебника по SQL

ahdenchik
()
Ответ на: комментарий от tip78

Ты сам сказал, что vacuum сломал порядок. Аналогично, может сломать порядок удаление строки, обновление версии БД и т д.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)
Ответ на: комментарий от KivApple

Добавляй auto increment колонку

У него там есть уже поле с целочисленным представлением времени, ему надо было добавить ORDER BY … NULLS FIRST но видимо он слишком крут для такого.

anonymous
()
Ответ на: комментарий от tip78

Попробую другую БД, там порядок строк строго детерминированный. Локальная версия называется Excel; облачная, продвинутая — Google Sheets.

anonymous
()