Email or username:

Password:

Forgot your password?
MrClon

sqlite меня знатно затролил. Использовал rowid в качестве внешнего ключа, а он взял да и поменял rowid у записей (видимо он перестраивает этот ключ при удалении строк из таблицы). И ведь когда завязывался на rowid посмотрел в доках про него, мало-ли, может там какие подводные камни и лучше добавить нормальный ID, не заметил никаких предупреждений. Уже сейчас, когда знал куда смотреть, со второй попытки заметил
«If the rowid is not aliased by INTEGER PRIMARY KEY then it is not persistent and might change. In particular the VACUUM command will change rowids for tables that do not declare an INTEGER PRIMARY KEY. Therefore, applications should not normally access the rowid directly, but instead use an INTEGER PRIMARY KEY»
Среди прочих увлекательных фактов о формате хранения.

Вот слабо им было написать «DO NOT USE rowid as foreign key if it is not aliased by…», но блин нет, гораздо важнее было сообщить что движок хранения на самом деле не использует обычный первичный ключ как первичный ключ.

Неизвестное количество данных в базе превратилось в тыкву. А данные эти я вручную собирал пару недель

7 comments
Taciturn

@MrClon Странно, с моей точки зрения это прямо вот из названия очевидно.

MrClon

@Taciturn у меня были подозрения что возможна какая-то подобная засада, но беглое чтение документации не подтвердило их (а читать все доки вдумчиво никакого времени не хватит)

MrClon

Во вчерашнем бэкапе как-будто всё ОК. Либо этого момента VACUUM не случался (кстати я его не запускал, так что ХЗ почему он вдруг произошёл), либо до недавнего времени я вовсе не удалял строк из той таблицы (в принципе возможно), либо я пока просто не заметил испорченных данных.
Благо дальше по плану был процедура в процессе которой можно будет за одно проверить часть данных

MrClon

Похоже VACUUM происходит при добавлении новой колонки. Собственно сегодня я как раз добавил одну

Taciturn

@MrClon Поздравляю, слава бекапам!

MrClon

@Taciturn и бэкапам бэкапов. Пока колупался с этим выяснил что основной бэкап походу повреждён (но это не точно borg check всё ещё думает). Но там хард посыпался, уважительная причина.
Надо бы ещё автоматические снапшоты в btrfs настроить, на всякий случай

Taciturn

@MrClon Ну это само собой. У меня автоматический бекап + второй бекап на вручную подключаемый HDD. Плюс третий на вручную подключаемый SSD, но только самых важных данных (и раз в три недели где-то). Ну и часть данных через Syncthing распространяется.

Go Up