После restore базы данных значения генераторов увеличиваются на количество записей соотв. таблиц. Так и должно быть? Мне почему-то кажется, что было бы логично, если бы БД восстанавливалась 1:1.
Здравствуйте, MNZ, Вы писали:
MNZ>После restore базы данных значения генераторов увеличиваются на количество записей соотв. таблиц. Так и должно быть? Мне почему-то кажется, что >было бы логично, если бы БД восстанавливалась 1:1.
Гм, а до этого у тебя все генераторы по 0 были чтоли ? Не ты знаешь, сервер настолько интеллектуален, что самостоятельно определяет какой генератор относится к какой таблице и рассчита её count(*) меняет значение.
Здравствуйте, loa, Вы писали:
loa>Здравствуйте, MNZ, Вы писали:
MNZ>>После restore базы данных значения генераторов увеличиваются на количество записей соотв. таблиц. Так и должно быть? Мне почему-то кажется, что >было бы логично, если бы БД восстанавливалась 1:1.
loa>Гм, а до этого у тебя все генераторы по 0 были чтоли ? Не ты знаешь, сервер настолько интеллектуален, что самостоятельно определяет какой генератор относится к какой таблице и рассчита её count(*) меняет значение.
Уточняю. Есть база данных, заполненная данными. Есть таблицы с суррогатными ключами, значения которых создаются генераторами. Если в такую таблицу вставить запись, значение ключа станет равным текущему значению указанного генератора плюс значение инкремента. При вставке, допустим, ста записей, значение генератора стало равным 100. Если вставить ещё одну запись, значение её ключа будет равным 101. Значение соответствующего генератора так же станет равным 101. Так вот! Если теперь сделать бэкап базы и восстановить её в новый файл, значение этого генератора в новой базе (в старой до бэкапа оно было равным 100), будет 200. Как это можно объяснить?
Насчёт второго вашего предложения, откинув сарказм, скажу, что значение генератора становится равным не count(*), а 2 * count(*).
Re[3]: Yaffil 1.0 b886. Фича backup/restore.
От:
Аноним
Дата:
19.01.05 12:42
Оценка:
Здравствуйте, MNZ, Вы писали:
MNZ>Уточняю. Есть база данных, заполненная данными. Есть таблицы с суррогатными ключами, значения которых создаются генераторами. Если в такую таблицу вставить запись, значение ключа станет равным текущему значению указанного генератора плюс значение инкремента. При вставке, допустим, ста записей, значение генератора стало равным 100. Если вставить ещё одну запись, значение её ключа будет равным 101. Значение соответствующего генератора так же станет равным 101. Так вот! Если теперь сделать бэкап базы и восстановить её в новый файл, значение этого генератора в новой базе (в старой до бэкапа оно было равным 100), будет 200. Как это можно объяснить?
MNZ>Насчёт второго вашего предложения, откинув сарказм, скажу, что значение генератора становится равным не count(*), а 2 * count(*).
Где этот генератор используется ? В триггерах before insert, где-то ещё ? Если отресторить эту БД на предыдущей версии дятла или на FB, эффект повторяется ?
Здравствуйте, Аноним, Вы писали:
А>Где этот генератор используется ? В триггерах before insert, где-то ещё ? Если отресторить эту БД на предыдущей версии дятла или на FB, эффект повторяется ?
А>hvlad
Генератор используется в значении по умолчанию:
DocTypeId INTEGER DEFAULT GEN_ID(DOCTYPE_GEN, 1) NOT NULL
При восстановлении на предыдущей версии Yaffil эффект повторяется. FireBird не подошёл в принципе, т.к. не поддерживает некоторые фичи дятла.
Re[5]: Yaffil 1.0 b886. Фича backup/restore.
От:
Аноним
Дата:
20.01.05 11:28
Оценка:
Здравствуйте, MNZ, Вы писали:
MNZ>Здравствуйте, Аноним, Вы писали:
А>>Где этот генератор используется ? В триггерах before insert, где-то ещё ? Если отресторить эту БД на предыдущей версии дятла или на FB, эффект повторяется ?
А>>hvlad
MNZ>Генератор используется в значении по умолчанию: MNZ>
MNZ>DocTypeId INTEGER DEFAULT GEN_ID(DOCTYPE_GEN, 1) NOT NULL
MNZ>
Тогда да, считай это фичей. Рестор создаёт пустую БД и заливает её данными из бекапа. А что ты хотел ?
В принципе наверное можно поднимать генераторы в 2 этапа... Посмотрим...
Но сейчас — это фича
MNZ>При восстановлении на предыдущей версии Yaffil эффект повторяется. FireBird не подошёл в принципе, т.к. не поддерживает некоторые фичи дятла.
Достаточно было просто создать отдельную БД с такой таблицей, вставить в неё пару записей и выполнить бекап\рестор.
hvlad
Re[6]: Yaffil 1.0 b886. Фича backup/restore.
От:
Аноним
Дата:
20.01.05 11:48
Оценка:
Здравствуйте, Аноним, Вы писали:
MNZ>>Генератор используется в значении по умолчанию: MNZ>>
MNZ>>DocTypeId INTEGER DEFAULT GEN_ID(DOCTYPE_GEN, 1) NOT NULL
MNZ>>
В догонку. А не добавилось ли это поле к существующей таблице с данными ?
Если да, то нужно было сразу его проапдейтить...
Если сделать бекап\рестор ещё раз, генераторы ведь останутся на месте ?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Аноним, Вы писали:
MNZ>>>Генератор используется в значении по умолчанию: MNZ>>>
MNZ>>>DocTypeId INTEGER DEFAULT GEN_ID(DOCTYPE_GEN, 1) NOT NULL
MNZ>>>
А> В догонку. А не добавилось ли это поле к существующей таблице с данными ? А>Если да, то нужно было сразу его проапдейтить...
Нет. БД создаётся один раз и структура её не меняется.
А> Если сделать бекап\рестор ещё раз, генераторы ведь останутся на месте ?
Нет. При каждом последующем бэкапе/ресторе значения всех генераторов увеличиваются на количество записей таблицы, в которых они используются. Все ключи же этих таблиц остаются как есть, т.е как было до бэкапа. Например, Id последней записи 100, и при каждом последующем бэкапе/ресторе оно остаётся таким, а значение генератора становится 200, 300, 400... и т.д. И если после такого рестора вставить запись, её Id будет 401, а не 101.
Здравствуйте, MNZ, Вы писали:
MNZ>Здравствуйте, Аноним, Вы писали:
А>>Где этот генератор используется ? В триггерах before insert, где-то ещё ? Если отресторить эту БД на предыдущей версии дятла или на FB, эффект повторяется ?
А>>hvlad
MNZ>Генератор используется в значении по умолчанию: MNZ>
MNZ>DocTypeId INTEGER DEFAULT GEN_ID(DOCTYPE_GEN, 1) NOT NULL
MNZ>
MNZ>При восстановлении на предыдущей версии Yaffil эффект повторяется. FireBird не подошёл в принципе, т.к. не поддерживает некоторые фичи дятла.
Принимаю как ошибку, скорее всего подправлю.
Re[8]: Yaffil 1.0 b886. Фича backup/restore.
От:
Аноним
Дата:
20.01.05 13:01
Оценка:
А>> Если сделать бекап\рестор ещё раз, генераторы ведь останутся на месте ? MNZ>Нет. При каждом последующем бэкапе/ресторе значения всех генераторов увеличиваются на количество записей таблицы, в которых они используются. Все ключи же этих таблиц остаются как есть, т.е как было до бэкапа. Например, Id последней записи 100, и при каждом последующем бэкапе/ресторе оно остаётся таким, а значение генератора становится 200, 300, 400... и т.д. И если после такого рестора вставить запись, её Id будет 401, а не 101.
Да, действительно. Похоже, что DEFAULT вычисляется при вставке, не зависимо от необходимости.
FB не позволяет использовать GEN_ID в DEFAULT'е
Будем смотреть, где собака порылась...