1)Когда ты бэкапишь базу, "CREATE VIEW" выписываются в порядке, в котором они создавались.
Казалось бы - ну и что? Теперь представим, что у тебя была вот такая база:
create table a (int aa); create view b as select * from a; create view c as select * from b;
Затем вью b немного изменили:
begin; drop view b; create view b as select * from a where aa < 10; commit;
(отдельный вопрос, почему это проходит без ругани, но такое поведение более-менее неплохо документировано)
Если теперь сделать ".dump", то сначала будет выписано "CREATE TABLE a", потом - "CREATE VIEW c", потом - "CREATE VIEW b". Естественно, "create view c" обломается, так как "b" еще не существует. Единственное лечение - пересоздать все view в "правильном порядке".
2)Если у тебя есть вью, описание которого оканчивается комментарием, то в бэкап это попадет вот таким образом:
create view commented_view as select something from some_table -- pretty useless view; create view another_view as ....
Видите точку с запятой в конце описания commented_view? А вот sqlite ее не видит, так как она ... Правильно, является теперь частью комментария!
Все это выяснилось в процессе поднятия из бэкапа столетней давности некий софт в условиях ... эээ ... жестких временных ограничений. Помнится,
(принимая позу Станиславского) "Не верю!"
Если кому надо: раз багрепорт, два багрепорт.