powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последствия редактирования RDB$ таблиц
10 сообщений из 10, страница 1 из 1
Последствия редактирования RDB$ таблиц
    #39241257
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Есть поле NUMERIC(15, 2), надо поменять на NUMERIC(15, 4).

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

UPDATE RDB$FIELDS проходит и позволяет выполнить указанную задачу.

Обновление системной таблицы выполняется в единственном подключении
к БД, после чего транзакция комитится, а подключение закрывается.

Вопрос: после операции UPDATE RDB$FIELDS надо ли сразу делать бэкап-рестор или
можно продолжать работать с базой. Грозит ли это чем-нибудь впоследствии?
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241260
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сервер 2.5.6.
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241274
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в RDB$FORMATS появилась новая запись (после коммита апдейта RDB$FIELDS), то может и пронесёт :)
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241291
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Глупый вопрос. Если NUMERIC хранится как целое и только при выдаче результата сервер проставляет десятичую точку в соответствии с установленными параметрами типа, то как тогда получается, что при изменении типа с NUMERIC(15,2) на NUMERIC(15,4) мы получаем правильный результат? Т.е. было 123.45 стало 123.4500, а не 1.2345. Там все-таки проходит апдейт всем значениями? Или как это работает?
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241322
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

движок запоминает в rdb$formats блоб с описанием метаданных таблицы и делает это при каждом изменении оных.
В каждой записи есть номер формата (фактически - номер версии метаданных таблицы).
В rdb$relations есть номер текущего формата.
Поэтому, прочитав запись с номером формата N и, зная текущий формат M, можно на лету преобразовать
старый формат в новый.
И никаких апдейтов ;)
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241325
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
о, а то я 15 лет мучался вопросом как это работает :)
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241331
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22о, а то я 15 лет мучался вопросом как это работает :)
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241365
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

http://www.ibase.ru/metaver/

написано в 2004 году, 12 лет назад.
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241405
sysdba22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В ФБ3 прямое редактирование RDB$ таблиц запрещено. ALTER TABLE там будет работать так же как и сейчас? Т.е. кидая ошибку при ПОТЕНЦИЛЬНОЙ потере точности, а не при реальной?

Если да, то это будет проблема. Например, как в нашем случае, когда надо в сжатые сроки провести деноминацию с добавлением копеек на базах предприятий, многие из которых работают в режиме 24х7. Конечно, можно удалять триггеры и чеки, создавать временное поле, переносить туда, удалять старое поле, переименовывать временное, восстанавливать триггеры и чеки. Но, когда баз туча и полей таких в одной базе могут быть сотни... И на крупных базах (более 100 Гб) такой процесс не будет быстрым.
...
Рейтинг: 0 / 0
Последствия редактирования RDB$ таблиц
    #39241438
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sysdba22,

а ты меняй NUMERIC(15,2) на NUMERIC(18,4) тогда ругани не будет
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последствия редактирования RDB$ таблиц
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]