dastapov: (Default)
[personal profile] dastapov
СЯУ, что sqlite обладает двумя совершенно очаровательными "фичами":
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 ее не видит, так как она ... Правильно, является теперь частью комментария!

Все это выяснилось в процессе поднятия из бэкапа столетней давности некий софт в условиях ... эээ ... жестких временных ограничений. Помнится, [livejournal.com profile] thesz давеча писал, что у sqlite на 1 строку кода приходится 100 строк тестов.

(принимая позу Станиславского) "Не верю!"

Если кому надо: раз багрепорт, два багрепорт.

(no subject)

Date: 2012-01-27 09:07 pm (UTC)
From: [identity profile] reasonspace.livejournal.com
Скулайт не нужен же. А баги знатные, да, особенно с обработкой комментов

(no subject)

Date: 2012-01-27 09:12 pm (UTC)
From: [identity profile] shmyg.livejournal.com
Втопку. Оракл рулит :)

(no subject)

Date: 2012-01-27 09:28 pm (UTC)
From: [identity profile] pavel-gordey.livejournal.com
Троль! ;)

(no subject)

Date: 2012-01-28 03:15 pm (UTC)
From: [identity profile] greenvoid.livejournal.com
Оракл:
col varchar2(100) -- bla-bla
сохраняет комментарий вместе с типом столбца в метаданных.

(no subject)

Date: 2012-01-28 03:20 pm (UTC)
From: [identity profile] shmyg.livejournal.com
Во-первых, непонятно, что это вообще значит: col varchar2(100) -- bla-bla. Где такое используется? Во-вторых, непонятно, хорошо это или плохо, что комментарий хранится в метаданных :).
"Имя, сестра, имя!"

(no subject)

Date: 2012-01-27 09:27 pm (UTC)
From: [identity profile] pavel-gordey.livejournal.com
Мдаааа...

(no subject)

Date: 2012-01-27 09:31 pm (UTC)
From: [identity profile] winnukem.livejournal.com
sqlite вообще веселая штука, например, там очень смешная система типов

(no subject)

Date: 2012-01-27 09:43 pm (UTC)
From: [identity profile] http://users.livejournal.com/_adept_/
А в какой реализации SQL она не смешная? Имхо везде весело.

(no subject)

Date: 2012-01-27 09:47 pm (UTC)
From: [identity profile] winnukem.livejournal.com
Она там динамическая и слабая, то есть можно в численную колонку записать строку, например. По-моему, это гораздо круче, чем в других.

(no subject)

Date: 2012-01-28 02:03 pm (UTC)
From: [identity profile] vp.livejournal.com
Ну так в SQLite, я б сказал, типов вообще нет. Попробуйте туда попишите, к примеру, даты-время, а потом попытайтесь по ним сделать селект where больше меньше. Получите много мата :)

(no subject)

Date: 2012-01-27 09:44 pm (UTC)
From: [identity profile] abadonne.livejournal.com
Забавно... Надо запомнить на всякий случай.

(no subject)

Date: 2012-01-27 11:49 pm (UTC)
From: [identity profile] infthi.livejournal.com
мне вот sqlite помнится прекрасным мегабайтным сишниклм >_<

(no subject)

Date: 2012-01-28 12:31 am (UTC)
From: [identity profile] vl-g.livejournal.com
А это такая фигня везде. Если воспользоваться мастером от MS SQL server 2000 получиться то же самое

(no subject)

Date: 2012-01-28 10:46 am (UTC)
From: [identity profile] poor-sysadm.livejournal.com
А вот кстати интересно, когда приложения транзакцию коммитят в sqlite, они sync делают?

(no subject)

Date: 2012-01-28 11:19 am (UTC)
From: [identity profile] dottedmag.livejournal.com
Зависит от прагм: http://sqlite.org/atomiccommit.html

(no subject)

Date: 2012-01-28 02:32 pm (UTC)
From: [identity profile] thesz.livejournal.com
Тысяча строк тестов. Тысяча!!!

(no subject)

Date: 2012-01-28 09:11 pm (UTC)
From: [identity profile] bytebuster463.livejournal.com
Кхм. Схему базы бекапить - это code smell, и это изобрёл не я.
Ваш пример очень нагляден, но есть ещё масса других ситуаций, в которых такое происходит. Например, constraints и triggers.

Правильный способ хранения схемы, безотносительно СУБД, - это скриптование от самого начала до текущей версии.
Следовательно, в первом примере view b должно было создаваться дважды: в первый раз - для версии 1, второй раз - для версии 2.

(no subject)

Date: 2012-01-31 10:49 pm (UTC)
From: [identity profile] the-arioch.livejournal.com
в интербейзе 5-м было наоборот... наивное упорядочивание по типам объектов

точный синтакс не помню, но примерно так.

create table aaa (int bbb);

....прошла пара месяцев и захотелось красивостей

create function xxx(int bbb): varchar(20) module 'xxx.dll' name 'xxx';
alter table aaa add (bbb_4human computed by (xxx(aaa)) )

.... все хорошо работало, пока не понадобилось развернуть бэкап

..restoring tables
aaa - failed: .....
..restoring user-defined functions
finishing, closing, going home.

минус одна таблица.

Profile

dastapov: (Default)
Dmitry Astapov

May 2022

M T W T F S S
       1
2345678
9101112131415
161718 19202122
23242526272829
3031     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags