Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
Извиняюсь за глупый вопрос, работаю в PostgreSQL совсем немного. Ситуация такая: к примеру, есть таблица table, в ней уникальное поле id. Добавляю записи в это поле. Если записи совпадут, то сервер вполне справедливо выдаст мне сообщение о том, что каждая запись должна быть уникальной. Собственно вопрос: как заменить данное сообщение своим с помощью триггера. Я попытался так: триггер before update, for each row BEGIN /* New function body */ SELECT id FROM table where id = NEW.id; if found THEN Raise Exception 'Обновление невозможно'; return null; END; спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2007, 16:05 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
Есть маленькая проблема: если две транзакции одновременно захотят вставить записи с одним id, отловить это сможет только unique индекс (и primary key как его разновидность). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 12:13 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
Глупый вопрос: А зачем вам менять сообщение? Может проще в клиентской части проверить на стандартное сообщение и подменить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 12:29 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
Funny_FalconГлупый вопрос: А зачем вам менять сообщение? Может проще в клиентской части проверить на стандартное сообщение и подменить?ну, наверное это было бы хорошим тоном - иметь возможность настройки текстов сообщений. Т.с. - "в одном, и том самом месте, где именно и возникает..." Разве нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 14:38 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
4321 Funny_FalconГлупый вопрос: А зачем вам менять сообщение? Может проще в клиентской части проверить на стандартное сообщение и подменить?ну, наверное это было бы хорошим тоном - иметь возможность настройки текстов сообщений. Т.с. - "в одном, и том самом месте, где именно и возникает..." Разве нет? имхо, это надо делать в клиентском приложении. а то получается хоть и в одном и том же месте, да только место выбрано неудачно (разве только пользователь работает напрямую с бд). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 15:03 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
st_sergимхо, это надо делать в клиентском приложении. а то получается хоть и в одном и том же месте, да только место выбрано неудачно (разве только пользователь работает напрямую с бд).имхо, ваше имхо неудачно. и столь же неудачна его аргументация. именно - отсутствием аргументации. если пользователь при десятке различных прослоек меж собой и базой должен получать одно осмысленное для него (а не разработчика) сообщение - было бы удобно изменить системное сообщение именно в той точке, где это делается один единственный раз (а не в десятке разнородных прослоек). Нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 15:20 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
4321имхо, ваше имхо неудачно. и столь же неудачна его аргументация. именно - отсутствием аргументации. если пользователь при десятке различных прослоек меж собой и базой должен получать одно осмысленное для него (а не разработчика) сообщение - было бы удобно изменить системное сообщение именно в той точке, где это делается один единственный раз (а не в десятке разнородных прослоек). Нет? выбор базы данных в качестве "той точки" сомнителен: - база не всегда отражает логическую модель приложения (одно и тоже исключение в базе данных может отражать совершенно разные события в приложении) - в sql, pl/sql коде приложений (виденных мною) не пишут локализованных сообщений - сообщения для end user'а часто бывают параметризированными, поэтому могут возникнуть проблемы в получении параметров для сообщения - клиенты для одной и тойже базы данных могут быть разными, след-но, форматрирование сообщений тоже может быть разным. - ... ps. imho ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 15:55 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
полностью согласен с st_serg , ... -админить такую бд с ерормесагами типа "Обновление невозможно" наверно афигительно удобно? -а пофигу что у нас бесполезный тригер... потом будем на форумах спрашивать "а че у меня апдейты тормозят.?" - а если у нас по другим причинам апдейт не прошел? а вот грохнутся у нас конект когда мы апдейт делали? или еще че нить с БД? других ошибок база что-ли делать не умеет и Libpq у нас тоже ошибки рожать не умеет совсем ..да? ... имхо решение для ленивых, понятно что написать PqExecute() if(error) { printf("%s",error) } проще всего и вроде как все красиво.. з.ы. у меня в конторе за такое бы ноги оторвали.. а потом только спрашивали.. причем не аргументы,а где я травы такой взял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.08.2007, 19:20 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
wbear -админить такую бд с ерормесагами типа "Обновление невозможно" наверно афигительно удобно? -а пофигу что у нас бесполезный тригер... потом будем на форумах спрашивать "а че у меня апдейты тормозят.?" - а если у нас по другим причинам апдейт не прошел? а вот грохнутся у нас конект когда мы апдейт делали? или еще че нить с БД? других ошибок база что-ли делать не умеет и Libpq у нас тоже ошибки рожать не умеет совсем ..да? ... 1. вообще говоря, никто не запрещает в месаге оставить номер ошибки и т.п. инфу, необходимую админу. К тому же админу не помешает хотя бы поверхностно знать структуру базы, которую он админит. (т.е. знать ,какой именно объект может выдавать непонятную ему мессагу). Месаги объектов, меж прочим, правильно организованные, должны быть легко доступны админу - для просмотра и соспоставления. 2. кто сказал, что это триггер? это тот же механизм, что распространяет мессаги. Только их текст - настраиваем (как параметрический, в т.ч.) - под каждый объект. Ничего _дополнительного_ тут не "тормозит" (кроме нас с вами ) 3. кто вам сказал, что изменяется текст сообщений о других ошибках? это ваши фантазии. Понятно - грибы пошли (эх, свалить бы сейчас в лесок ...) Но вы уж поаккуратнее с грибочками, плз. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 10:35 |
|
||
|
Вопрос по триггеру
|
|||
|---|---|---|---|
|
#18+
>3. кто вам сказал, что изменяется текст сообщений о других ошибках? ты немного непонял. могу предположить что ошибка нарушения повторного ключа вполне естественна для клиенской части и в принципе отрабатывается(все ошибки этого запроса не вызывают критикал исключения), при этом человек хочет как-то ее обозначить текстом.. желание сделать так, чтоб этот текс выдавала база может быть только в случае если в клиенте написанно PqExecute() if(error) { printf("%s",error) } в этом случае клиент при других ошибках получит так им не желаемый посгревый текс ошибки.. т.е. как мертвому припарка. далее.. может быть ситуация что у чела там в коде нечто типа PqExecute(); if(error = "Обновление невозможно") { printf("%s",error) } else { throw exception }; что тоже криво.. можно вставить код ошибки как ты сказал.. но хмм.. разносить константы(номера ошибок) по базе и коду... не фантан решение. если там Id ПК то клиенский код который может такое понадобится выглядит как то так: то запрос видимо такой "updata table set id=$new_id where id=$old_id...." по моему имхо, это не безапастно..и таких вещей лучше избегать, я с необходимостью такого запроса не сталкивался никогда.. я бы наверно первое что попытался сделать это определить через ошибку бибилиотеки тип ошибки, если не получится, попробывал бы через функцию типа update_some_table(); возвращаюшую соответственно 0/1. исключительно из таких соображений я писал свой пост.. ибо других ситуация когда предложенное в начале решение будет удобное, безопасное, "прямое" и т.д. я представить не могу никак.. имхо спор помойму движется в сторону "хранимые процедуры" vs "код на клиенте" странность номер 2 : такой тригер(в первом посте) запрешает обновлять уже существующие записи. т.е. инсертить я могу и могу менять ПК у записи и удалять записи... ну это я конечно придираюсь уже :) конечно там в ифе условие пропущено. а мож там у человека ограниченный набор ID и в клиенте написан код для переиспользования идишников... вобщем все странно и как-то неправильно изначально :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2007, 12:51 |
|
||
|
|

start [/forum/topic.php?fid=53&gotonew=1&tid=2005135]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
8ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 357ms |

| 0 / 0 |
