Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IDENTITY / 10 сообщений из 10, страница 1 из 1
28.09.2018, 10:33
    #39709694
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
Занялся переводом генерации поля первичного ключа ID у таблиц с SEQUENCE на "GENERATED BY DEFAULT AS IDENTITY" и споткнулся. В релизнотах написано, что нельзя преобразовать обычное поле в IDENTITY и обратно. Значит, надо добавлять новое поле, настраивать его и удалять старое. Добавляю новое поле в таблицу:
Код: sql
1.
2.
ALTER TABLE TEST_TABLE
ADD ID2 INTEGER GENERATED BY DEFAULT AS IDENTITY


При коммите ошибка:
Код: plaintext
1.
2.
This operation is not defined for system tables.
unsuccessful metadata update.
Cannot make field ID2 of table TEST_TABLE NOT NULL because there are NULLs present.

Нельзя добавить поле, т.к. его значение будет пустое. Дефолтное значение команда не принимает.

Выход вижу только один: выгружать данные в скрипт, очищать таблицу, добавлять поле и вставлять обратно. Но это придется делать для каждой такой таблицы каждой базы данных, что вообще не радует.

Вопросы: есть ли другой путь без лишних телодвижений добавить и настроить IDENTITY-поле? И если нет, будут ли разработчики менять такое поведение или их все устраивает?

Вообще, если честно, мне непонятно, зачем надо было IDENTITY объявлять как NOT NULL. Для ПК - да, это необходимо явно указать, но не факт же, что IDENTITY-поле является ПК. Какая разница внутреннему триггеру, можно NULL'ы совать в поле или нет - все равно генератор дергается.
...
Рейтинг: 0 / 0
28.09.2018, 11:23
    #39709726
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
CyberMax,

в 4.0 столбец идентификации можно преобразовать в обычный, но не наоборот.
Плюс добавили разные способы генерации значений столбцов идентификации BY DEFAULT или ALWAYS.

В остальном по части DDL ничего не поменялось. Поведение вряд ли будут менять ибо оно логично.
...
Рейтинг: 0 / 0
28.09.2018, 11:27
    #39709729
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
CyberMax,

кстати возможно ALWAYS сам заполнит поле значениями, но я не уверен (не пробовал).
...
Рейтинг: 0 / 0
28.09.2018, 11:38
    #39709738
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
CyberMax,

ИХМО, надо попросить в трекере чтобы при добавлении IDENTITY полей в таблицу с данными значение заполнялось автоматически. То что оно не может быть NULL описано в стандарте и этого точно не изменишь. В 3.0 вряд ли сделают, а на 4.0 если будешь убедительным могут.
...
Рейтинг: 0 / 0
28.09.2018, 12:37
    #39709776
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
CyberMaxЗанялся переводом генерации поля первичного ключа ID у таблиц с SEQUENCE на "GENERATED BY DEFAULT AS IDENTITY"Я может глупость спрошу, но в чем смысл? Работа ради работы?
...
Рейтинг: 0 / 0
28.09.2018, 14:13
    #39709853
KreatorXXI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
Ivan_PisarevskyCyberMaxЗанялся переводом генерации поля первичного ключа ID у таблиц с SEQUENCE на "GENERATED BY DEFAULT AS IDENTITY"Я может глупость спрошу, но в чем смысл? Работа ради работы?
Чтобы назад нельзя было вернуться. Я иногда так делаю.
...
Рейтинг: 0 / 0
28.09.2018, 16:38
    #39709987
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
Симонов Дениснадо попросить в трекере чтобы при добавлении IDENTITY полей в таблицу с данными значение заполнялось автоматически
Где-то вообще позволительно добавлять серийники в не пустую таблицу?
...
Рейтинг: 0 / 0
28.09.2018, 17:00
    #39710011
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
wadman,

да чёрт его знает. Никогда не пробовал. Обычно я принимаю решение о том какой будет ПК ещё на этапе создания таблицы и не переделываю его потом.

ИХМО, рефакторинг здесь не к чему. Одно дело использовать в новых таблицах, другое — зачем-то старые ломать.
А вообще IDENTITY в ряде случаев удобен, например когда значение ПК не нужно перед вставкой, в какой-нибудь таблице логе, которая пользователем не заполняется напрямую.
...
Рейтинг: 0 / 0
01.10.2018, 04:07
    #39710708
CyberMax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
Ivan_PisarevskyЯ может глупость спрошу, но в чем смысл? Работа ради работы?
Работа ради а) использования более удобной формы работы с последовательностями, б) чтобы не было зоопарка в метаданных.
Естественно, этот процесс не на один присест, а на неопределенное время.
...
Рейтинг: 0 / 0
01.10.2018, 09:43
    #39710765
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
IDENTITY
Симонов Денисда чёрт его знает. Никогда не пробовал.
Что в оракле (если не ошибаюсь), что в информиксе не позволительно.
Делал только через переливку в новую таблицу.
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / IDENTITY / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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