powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Занести null в колонку с ограничением not null
14 сообщений из 14, страница 1 из 1
Занести null в колонку с ограничением not null
    #40008068
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую знатоков и разработчиков!

WI-V3.0.6.33328 Firebird 3.0

Занимаюсь вопросами миграции с Firebird 1.5 на 3.0. Для 1.5 есть серия диагностических хранимых процедур. В частности есть проверка на наличие null в полях с ограничением not null. В процессе перевода на новую версию, инвентаризации и тестирования этих хранимых процедур я попытался создать в 3-ей версии сервера тестовую таблицу с подобным артефактом, но не получилось. Возможно ли в новых версиях сервера как-нибудь запихнуть null в колонку с ограничением not null? Или данная диагностика уже не актуальна?
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008070
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory, впихнуть невпихуемое?
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008072
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory,

а в полторашке это было возможно?
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008076
Фотография o_v_a
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так, видимо, могло статься, когда кляуза NOT NULL добавилась на поле, когда в таблице уже были данные с null в этом поле.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008082
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI
ggreggory,

а в полторашке это было возможно?


Если голову вовремя выключить, возможным становится многое. Если у меня не активировался придумывательный склероз, можно было на таблице с данными создать поле not null и не целиком его заполнить. Или наложить на существующее поле это ограничение и забить на заполнение. В конце концов, просто базу поломать ресетами компа, особенно с FW off.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008086
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ggreggory
Приветствую знатоков и разработчиков!

WI-V3.0.6.33328 Firebird 3.0

Занимаюсь вопросами миграции с Firebird 1.5 на 3.0. Для 1.5 есть серия диагностических хранимых процедур. В частности есть проверка на наличие null в полях с ограничением not null. В процессе перевода на новую версию, инвентаризации и тестирования этих хранимых процедур я попытался создать в 3-ей версии сервера тестовую таблицу с подобным артефактом, но не получилось. Возможно ли в новых версиях сервера как-нибудь запихнуть null в колонку с ограничением not null? Или данная диагностика уже не актуальна?

Ну, можно напихать какие хошь данные, а потом констреинт добавить:

Код: sql
1.
ALTER TABLE TTT ADD CONSTRAINT CNSTR_TTT CHECK (FIELD1 is not null);
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008128
ggreggory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Одной проверкой меньше. Спасибо за отклики!
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008311
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggreggory
Возможно ли в новых версиях сервера как-нибудь запихнуть null в колонку с ограничением not null? Или данная диагностика уже не актуальна?

Возможно. Вот сегодня рестор базы (3.0.5 SS) остановился по этой причине (5 строк с Null в поле с ограничением Not Null).
Примерный сценарий - при работающих пользователях в таблицу с записями добавляешь колонку, указываешь значение, указываешь NOT NULL. Некоторое время параллельно работающие пользователи будут создавать записи с NULL в этом поле.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008314
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тест-кейс, как в FB 3.0.5 сделать строки с null в not null-поле.

1. Создаем две таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
CREATE TABLE TEST_TABLE (
    ID         INTEGER NOT NULL,
    NEW_FIELD  INTEGER
);

CREATE TABLE TEST_TABLE_2 (
    ID  DOM$KEY NOT NULL
);



SET TERM ^ ;

/* Trigger: TEST_TABLE_2_AI0 */
CREATE OR ALTER TRIGGER TEST_TABLE_2_AI0 FOR TEST_TABLE_2
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
    INSERT INTO TEST_TABLE(id) values(new.id);
END
^

SET TERM ; ^



2.Добавляем строки в первую таблицу:
Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO TEST_TABLE (ID, NEW_FIELD)
                VALUES (1, 1);
INSERT INTO TEST_TABLE (ID, NEW_FIELD)
                VALUES (2, 2);
INSERT INTO TEST_TABLE (ID, NEW_FIELD)
                VALUES (3, 3);



Здесь делаю переконнект. Но возможно это не требуется.

3. Пробуем вставить запись и откатываем транзакцию:
Код: sql
1.
INSERT INTO TEST_TABLE_2(ID) VALUES (6)



4. Делаем второе поле у первой таблицы NOT NULL:
Код: sql
1.
ALTER TABLE TEST_TABLE ALTER NEW_FIELD SET NOT NULL



5. Снова вставляем запись и коммитим транзакцию:
Код: sql
1.
INSERT INTO TEST_TABLE_2(ID) VALUES (6)



6. Делаем SELECT * FROM TEST_TABLE. Вуаля, у нас в NEW_FIELD - NULL.
Код: plaintext
1.
2.
3.
4.
ID	NEW_FIELD
1	1
2	2
3	3
6	
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008348
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o_v_a
Так, видимо, могло статься, когда кляуза NOT NULL добавилась на поле, когда в таблице уже были данные с null в этом поле.

С 3.0 такое вроде тоже уже не прокатывает. Скорее сначала там не было not null и была проверка. Потом сделали это требование, а проверка осталась артефактом.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008349
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

Это очень похоже на баг.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008350
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

в трекер занесёшь ?
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008357
Фотография CyberMax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

CORE-6416
Упростил тест-кейс на 1 шаг.
...
Рейтинг: 0 / 0
Занести null в колонку с ограничением not null
    #40008361
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CyberMax,

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


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