powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, триггер для проверки FK для id
11 сообщений из 11, страница 1 из 1
Помогите, триггер для проверки FK для id
    #38650279
burn_ALL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какой фунцией можно решить эту задачу: при измении id проверять зависимость FK у других записей. Если используется - поднимать исключение?
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38650327
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
burn_ALL,

Черезжопной функцией. Иключительно для любителей острых приключений.

Прочитайте про опции ON DELETE, ON UPDATE объявления ссылочной целостности .
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38650377
burn_ALL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
/\/\/\/\/\/\,

Через жопной пользуйся сам, клоун... лучше бы вообще не отвечал...

if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then
RAISE EXCEPTION '';
вот ответ.
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38650447
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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 (она подразумевается по умолчанию) вызывает ошибку нарушения ссылочной целостности при попытке изменить ключевое поле.
Кстати, почему вообще возник вопрос. Чем не устраивает поведение по умолчанию при наличии ссылочной целостности?

Поэтому черезжопным способом пользуюсь не я.
Продолжайте впихивать странные конструкции в интересные места.
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38650592
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burn_ALL/\/\/\/\/\/\,

Через жопной пользуйся сам, клоун... лучше бы вообще не отвечал...

if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then
RAISE EXCEPTION '';
вот ответ.
"печально я гляжу на ваше поколенье"


вы, сударь, конечно не оригинальны в ряду нынешних суда рей
, но ветка с новой, молодой кровью, стала отдавать ватой.
стёганной ватой.
уже третий, наверное, день.


хотя, я наблюдаю забавную ссылочную конструкцию id = ANY(NEW.dependencies))
Исходя из этого, заключаю: NEW.dependencies есть array
следовательно это не стандартный f-key, а нечто велосипедное
может быть и мне оно-такое где-то надо ?
как вы считаете,/\/\/\/\/\/\ ?
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38650779
/\/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq...
Исходя из этого, заключаю: NEW.dependencies есть array
...


Видимо, я работаю в гетеросексуальной конторе. Про тип ARRAY как-то даже и не подумал. То что якобы ссылочная целостность проверяется триггером - уже достаточно для диагноза.

Кстати, в связи со вновь открывшимися обстоятельствами было бы очень интересно увидеть определение ссылочной целостности на это поле.

С вероятностью 95% эта целостность воображаемая (то есть существующая только в голове автора или не существующая вовсе, что примерно одно и то же).

Что я думаю про тип ARRAY:
Если какой-то субъект предложит воспользоваться типом ARRAY, то ему необходимо выпукло и наглядно продемонстрировать:
- Соответствие типа ARRAY теории построения реляционных баз данных. А именно, соответствие нормальным формам (например, первой).
- Приемы работы с этим полем. Наглядность и привычность конструкций с применением этого типа, Особо эстетствующие могут продемонстрировать работу с массивом, у которого несплошная индексация (то есть начинается не с 1 и есть пропуски в индексах).
- Скорость работы с типом ARRAY и традиционные для БД типы. Это что-то вроде вишенки на торт.

В случае отказа - совершить над субъектом оскорбление действием. Просто обругать - недостаточно.
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38651690
burn_ALL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, вы те кто пытаетесь ту выпендриться, и ткнуть меня носом... Задайте себе два вопросва, вы понимаете слова задача, и тригер...
поясняю, других вариантов быть не может... ЗАДАЧА и ТРИГЕР (КЛЮЧЕВЫЕ СЛОВА)... Так, что хорош мусолить!!!
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38651730
/\/\/\/\/\/\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Во-вторых: что-то не устраивает - пожалуйтесь модератору.
Во-первых: Про Вас уже давно забыли. Взрослые люди обсуждают действительно интересные вопросы.


Раз уж Вы (а точнее вдумчивый читатель) тут, то объясните что будет происходить каждый раз при срабатывании триггера. Особенно интересует часть, вырванная из контекста:
burn_ALLselect * FROM version where id = ANY(NEW.dependencies)


Особо осветите вопрсы:
- Что произойдет со скоростью выполнения при наличии в таблице нескольких записей (например, 5-7 млн). Особо объясните что произойдет при размеренности массива (у нас же массивы?) где-нибудь так 500-700.
- Приведите пример индекса, который будет использоваться при поиске.

Все это полезно продемонстрировать на каком-нибудь тестовом примере.
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38651983
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burn_ALLРебята, вы те кто пытаетесь ту выпендриться, и ткнуть меня носом... Задайте себе два вопросва, вы понимаете слова задача, и тригер...
поясняю, других вариантов быть не может... ЗАДАЧА и ТРИГЕР (КЛЮЧЕВЫЕ СЛОВА)... Так, что хорош мусолить!!!
ребят во дворе ищи, мальчик
им и капс включай, им и на 11адинадин налегай *


тут люди просто слегка стебутся
что им, людям, в принципе пока еще не запретили
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38652612
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
burn_ALL if (EXISTS(select * FROM version where id = ANY(NEW.dependencies))) then
RAISE EXCEPTION '';
вот ответ.

Это не ответ. Это начала долгого и неприятного разговора. Вопрос: на каком уровне изоляции транзакций эта конструкция будет надежно работать? Если очень хочется поискать, это на write skew очень похоже. Что делать, если в запросе уровень изоляции недостаточен для обеспечения целостности с использованием этого триггера?
...
Рейтинг: 0 / 0
Помогите, триггер для проверки FK для id
    #38652625
V&N
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
V&N
Гость
maxkar, ну как-бы и не было нормального вопроса - "Сама придумала – сама решилаобиделась"

насчет изолированности, разработчик обязан проконтролировать нужный ему уровень или нет?
если ниже, чем нужно, отвалить исключение или ахинею посчитать?
может там однопользовательское приложение ...

решается - current_setting('transaction_isolation') ...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Помогите, триггер для проверки FK для id
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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