не понимает значение '' для полей типа INT

Konrad
Дата: 14.06.2004 17:57:18
Проапгрейдил до 7.4.1. Что вылезло сразу:

1. старые OPAQUE не берет, нужен TRIGGER
2. отсутствует тип datetime (вообще, как я понял, новая версия несколько по-иному подходит к работе с локальными датой/временем)
3. Очень неприятная особенность (пока, по крайней мере) - теперь в поле INTEGER нельзя вставить значение '' (раньше он его понимал как NULL).
Соответственно, команда copy не подхватывает файлы с недостающими колонками (ранее 7.2. с этим делом справлялся). Как это возможно быстро победить, т.к. довольно много приложений используют такой подход?..
Konrad
Дата: 14.06.2004 18:07:24
сейчас копаюсь в доках,
для COPY нашел особенность - можно ставить WITH NULL AS ''
можно ли как-нибудь это перенести на обычные INSERT'ы?
wbear
Дата: 14.06.2004 19:50:44
в Cоpy сойдет и 1\t\t123\n вставит как (1,NULL,123) , а для инсерта такого нету.. заменяй '' на NULL, а вообще странно что '0' оно может в int4 сконвертить ,а из '' может зделать только NULL::text, еше меня убило то что оно(postgres v7.x.x) не знает что такое 0xAF12 и никак его не хочет воспринимать как число(понятно дело функцию можно написать но блин обыдно :))
Konrad
Дата: 15.06.2004 08:48:13
Вот засада!
Столько приложений завязано с этой "особенностью"..
Настали мои "жаркие" деньки....................
wbear
Дата: 15.06.2004 11:30:12
если код поправить низя то впринцепе можно извратнутся.. делаеш в таблице доп поле mirror_int int4 , а то поле делаеш text , потом пиниш на эту таблицу рулезы на insert,update( которые заполняли бы поле mirrot_int в зависимости от значения исходного поля) и view на таблицу
Konrad
Дата: 16.06.2004 10:28:25
не, ну это можно, имхо, сделать попроще - триггер before update, insert, где в случае new.int='' он меняется на NULL :)

в данном случае вместо триггеров проще было подправить программы :)

просто как-то получается, что прошлые версии не полностью совместимы с предыдущими, а это, имхо, неприятно
wbear
Дата: 16.06.2004 15:57:32
т.е ты хочешь сказать что если есть тригер
....if new.x <> NULL then new.x = 0 else new.x = 1....
на таблицу
some_table (x int4);
то запрос
insert into some_table values ('xxxxxxxxxxxxxxxxxxx');
не выдаст ошибку???

ему в new.int(int4) запихивают text ..думаю еще до тригера вывалица ошибка
Konrad
Дата: 16.06.2004 16:22:42
///ему в new.int(int4) запихивают text ..думаю еще до тригера вывалица ошибка

Вы правы :)
Даже в случае с Before insert/update...