|
|
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
какой фунцией можно решить эту задачу: при измении id проверять зависимость FK у других записей. Если используется - поднимать исключение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 14:03:52 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
burn_ALL, Черезжопной функцией. Иключительно для любителей острых приключений. Прочитайте про опции ON DELETE, ON UPDATE объявления ссылочной целостности . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 14:31:57 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
/\/\/\/\/\/\, Через жопной пользуйся сам, клоун... лучше бы вообще не отвечал... if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then RAISE EXCEPTION ''; вот ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 15:00:08 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
burn_ALL, Специально для Вас (точнее для тех, кто умеет принимать советы) почитаю в слух документацию: http://www.postgresql.org/docs/9.2/static/sql-createtable.html In addition, when the data in the referenced columns is changed, certain actions are performed on the data in this table's columns. The ON DELETE clause specifies the action to perform when a referenced row in the referenced table is being deleted. Likewise, the ON UPDATE clause specifies the action to perform when a referenced column in the referenced table is being updated to a new value. If the row is updated, but the referenced column is not actually changed, no action is done. Referential actions other than the NO ACTION check cannot be deferred, even if the constraint is declared deferrable. There are the following possible actions for each clause: NO ACTION Produce an error indicating that the deletion or update would create a foreign key constraint violation. If the constraint is deferred, this error will be produced at constraint check time if there still exist any referencing rows. This is the default action. RESTRICT Produce an error indicating that the deletion or update would create a foreign key constraint violation. This is the same as NO ACTION except that the check is not deferrable. CASCADE Delete any rows referencing the deleted row, or update the value of the referencing column to the new value of the referenced column, respectively. Таки образом, выставление опции RESTRICT (она подразумевается по умолчанию) вызывает ошибку нарушения ссылочной целостности при попытке изменить ключевое поле. Кстати, почему вообще возник вопрос. Чем не устраивает поведение по умолчанию при наличии ссылочной целостности? Поэтому черезжопным способом пользуюсь не я. Продолжайте впихивать странные конструкции в интересные места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 15:50:08 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
burn_ALL/\/\/\/\/\/\, Через жопной пользуйся сам, клоун... лучше бы вообще не отвечал... if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then RAISE EXCEPTION ''; вот ответ. "печально я гляжу на ваше поколенье" вы, сударь, конечно не оригинальны в ряду нынешних суда рей , но ветка с новой, молодой кровью, стала отдавать ватой. стёганной ватой. уже третий, наверное, день. хотя, я наблюдаю забавную ссылочную конструкцию id = ANY(NEW.dependencies)) Исходя из этого, заключаю: NEW.dependencies есть array следовательно это не стандартный f-key, а нечто велосипедное может быть и мне оно-такое где-то надо ? как вы считаете,/\/\/\/\/\/\ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 17:38:26 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
qwwq... Исходя из этого, заключаю: NEW.dependencies есть array ... Видимо, я работаю в гетеросексуальной конторе. Про тип ARRAY как-то даже и не подумал. То что якобы ссылочная целостность проверяется триггером - уже достаточно для диагноза. Кстати, в связи со вновь открывшимися обстоятельствами было бы очень интересно увидеть определение ссылочной целостности на это поле. С вероятностью 95% эта целостность воображаемая (то есть существующая только в голове автора или не существующая вовсе, что примерно одно и то же). Что я думаю про тип ARRAY: Если какой-то субъект предложит воспользоваться типом ARRAY, то ему необходимо выпукло и наглядно продемонстрировать: - Соответствие типа ARRAY теории построения реляционных баз данных. А именно, соответствие нормальным формам (например, первой). - Приемы работы с этим полем. Наглядность и привычность конструкций с применением этого типа, Особо эстетствующие могут продемонстрировать работу с массивом, у которого несплошная индексация (то есть начинается не с 1 и есть пропуски в индексах). - Скорость работы с типом ARRAY и традиционные для БД типы. Это что-то вроде вишенки на торт. В случае отказа - совершить над субъектом оскорбление действием. Просто обругать - недостаточно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 22:26:16 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
Ребята, вы те кто пытаетесь ту выпендриться, и ткнуть меня носом... Задайте себе два вопросва, вы понимаете слова задача, и тригер... поясняю, других вариантов быть не может... ЗАДАЧА и ТРИГЕР (КЛЮЧЕВЫЕ СЛОВА)... Так, что хорош мусолить!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 09:44:52 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
Во-вторых: что-то не устраивает - пожалуйтесь модератору. Во-первых: Про Вас уже давно забыли. Взрослые люди обсуждают действительно интересные вопросы. Раз уж Вы (а точнее вдумчивый читатель) тут, то объясните что будет происходить каждый раз при срабатывании триггера. Особенно интересует часть, вырванная из контекста: burn_ALLselect * FROM version where id = ANY(NEW.dependencies) Особо осветите вопрсы: - Что произойдет со скоростью выполнения при наличии в таблице нескольких записей (например, 5-7 млн). Особо объясните что произойдет при размеренности массива (у нас же массивы?) где-нибудь так 500-700. - Приведите пример индекса, который будет использоваться при поиске. Все это полезно продемонстрировать на каком-нибудь тестовом примере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 10:27:11 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
burn_ALLРебята, вы те кто пытаетесь ту выпендриться, и ткнуть меня носом... Задайте себе два вопросва, вы понимаете слова задача, и тригер... поясняю, других вариантов быть не может... ЗАДАЧА и ТРИГЕР (КЛЮЧЕВЫЕ СЛОВА)... Так, что хорош мусолить!!! ребят во дворе ищи, мальчик им и капс включай, им и на 11адинадин налегай * тут люди просто слегка стебутся что им, людям, в принципе пока еще не запретили ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 13:22:55 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
burn_ALL if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then RAISE EXCEPTION ''; вот ответ. Это не ответ. Это начала долгого и неприятного разговора. Вопрос: на каком уровне изоляции транзакций эта конструкция будет надежно работать? Если очень хочется поискать, это на write skew очень похоже. Что делать, если в запросе уровень изоляции недостаточен для обеспечения целостности с использованием этого триггера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 23:06:33 |
|
||
|
Помогите, триггер для проверки FK для id
|
|||
|---|---|---|---|
|
#18+
maxkar, ну как-бы и не было нормального вопроса - "Сама придумала – сама решилаобиделась" насчет изолированности, разработчик обязан проконтролировать нужный ему уровень или нет? если ниже, чем нужно, отвалить исключение или ахинею посчитать? может там однопользовательское приложение ... решается - current_setting('transaction_isolation') ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 23:29:45 |
|
||
|
|

start [/forum/topic.php?fid=53&fpage=127&tid=1998666]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
59ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 343ms |

| 0 / 0 |
