powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql. Как получить текст ошибки.
10 сообщений из 10, страница 1 из 1
plpgsql. Как получить текст ошибки.
    #33741984
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишется процедура, которая среди всех действий будет делать insert в таблицу, на которой есть уникальные индексы (не только на поле id). Хотелось бы при возникновении ошибки уникальности получить текст (тот, который я вижу, например в pgAdmin). Дальше я бы с ним сделал что мне нужно. Есть такая возможность?

PS. Постгрес только осваиваю, пытаюсь мыслить аналогчно с ораклом.
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33743821
DeWiL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.postgresql.org/docs/8.1/interactive/plpgsql-porting.html

Код: plaintext
1.
2.
3.
4.
5.
6.
    BEGIN
        INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, now());
    EXCEPTION
        WHEN unique_violation THEN ( 2 )
            -- don't worry if it already exists
    END;
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33743979
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeWiLhttp://www.postgresql.org/docs/8.1/interactive/plpgsql-porting.html

Код: plaintext
1.
2.
3.
4.
5.
6.
    BEGIN
        INSERT INTO cs_jobs (job_id, start_stamp) VALUES (v_job_id, now());
    EXCEPTION
        WHEN unique_violation THEN ( 2 )
            -- don't worry if it already exists
    END;

Спасибо большое. Но я так и не нашел как получить текст ошибки .
К примеру, выполняя в pgAdmin следующий код
Код: plaintext
insert into users(field1, f2, f3) values ('Val1','Val1','Val1')
Я получаю ошибку
Код: plaintext
ERROR:  duplicate key violates unique constraint "users_field1_unique" 
Вот ее-то я и хочу получить в процедуре в виде текста, чтобы сделать с ним все, что пожелаю (в частности, я смогу определить в какое поле попытались положить неуникальное значение).

PS. За ссылку отдельное спасибо. Но я не нашел, в каком разделе это может быть. В указанном - нет.
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33744402
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько я знаю в plpgsql этого нету..
попробуй поискать в других встроеных языках.
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33744590
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearнасколько я знаю в plpgsql этого нету..
попробуй поискать в других встроеных языках.
Спасибо.

Тогда попробую переформулировать вопрос - есть ли возможность определить, что сломалось? Т.е. какой уникальный индекс стрельнул или сразу поле таблицы определить... Хочется же пользователю сказать что-то осмысленное, а не "хде-то тут вы ввели что-то, что уже есть в базе"
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33745557
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну навскидку в голову пришла такая технология.

select into rec * from
(
select field1 = 'my_val1' as check_f_1,....,fieldN = 'my_valN' as check_f_N from insert_table
) as x
where x.check_f_1 or ... or x.check_f_N;
-- все уникальные поля
if rec.check_f_1 then
return кто-то до вас уже ввел такое же значерие в поле "адекватное имя поля field1;
end;

...
if rec.check_f_N then
return кто-то до вас уже ввел такое же значерие в поле "адекватное имя поля fieldN;

end;

insert ... into insert_table (...) values (...)
return 'OK';

вобщем вместо,field1 = 'my_val1' может быть любое другое логическое выражение ..
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33745573
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
или тебе же всеравно..надо обрабатывать результат выполнения инсерта(втавился не вставился) снаружи(c php perl).. там и текст ошибки обрабатывай.
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33745632
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wbearили тебе же всеравно..надо обрабатывать результат выполнения инсерта(втавился не вставился) снаружи(c php perl).. там и текст ошибки обрабатывай.
Так и придется. Хотел сделать законченную функцию, которая бы возвращала код (мой) ошибки, а не клиент бы ловил ошибку и разбирал ее. Эх...
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33747077
фффф
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wbearнасколько я знаю в plpgsql этого нету..
попробуй поискать в других встроеных языках.
SQLERRM - вроде то что надо (только в 8.1)
...
Рейтинг: 0 / 0
plpgsql. Как получить текст ошибки.
    #33747531
wbear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
век живи век учись... :)
а я все еще застрял в 7.4.. хотя уже давно под 8.1 сижу :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / plpgsql. Как получить текст ошибки.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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