Size: a a a

pgsql – PostgreSQL

2021 February 04

IC

Igor Chizhov in pgsql – PostgreSQL
Версия 12, убирать не буду, пока не мешает.
источник

R

Rustam in pgsql – PostgreSQL
Братцы подскажите где косячу 🤨

имею оператор
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = PH.id_shooting_do;

работает, обновляет все записи и верно выставляет значения. Пытаюсь обернуть это в триггер и не работает

   if tg_op = 'DELETE' then
 UPDATE ksapp_shooting_do SH
 SET last_frame_photo_editing = 'delete'
 FROM ksapp_photo_editing PH
 WHERE SH.id = old.PH.id_shooting_do;
 return old;
   else
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = new.PH.id_shooting_do;
return new;
источник

a

antuan in pgsql – PostgreSQL
Rustam
Братцы подскажите где косячу 🤨

имею оператор
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = PH.id_shooting_do;

работает, обновляет все записи и верно выставляет значения. Пытаюсь обернуть это в триггер и не работает

   if tg_op = 'DELETE' then
 UPDATE ksapp_shooting_do SH
 SET last_frame_photo_editing = 'delete'
 FROM ksapp_photo_editing PH
 WHERE SH.id = old.PH.id_shooting_do;
 return old;
   else
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = new.PH.id_shooting_do;
return new;
А что именно не работает?
источник

R

Rustam in pgsql – PostgreSQL
триггер при попытки сработать выдает ошибку
источник

YS

Yaroslav Schekin in pgsql – PostgreSQL
Rustam
Братцы подскажите где косячу 🤨

имею оператор
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = PH.id_shooting_do;

работает, обновляет все записи и верно выставляет значения. Пытаюсь обернуть это в триггер и не работает

   if tg_op = 'DELETE' then
 UPDATE ksapp_shooting_do SH
 SET last_frame_photo_editing = 'delete'
 FROM ksapp_photo_editing PH
 WHERE SH.id = old.PH.id_shooting_do;
 return old;
   else
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = new.PH.id_shooting_do;
return new;
Это, на первый взгляд, совсем неправильное преобразование (как вообще "old.PH.id_shooting_do" работает, даже любопытно).
Тут, кажется, получились CROSS JOIN-ы ksapp_shooting_do и ksapp_photo_editing, нет?
источник

АГ

Алина Головлева... in pgsql – PostgreSQL
Rustam
Братцы подскажите где косячу 🤨

имею оператор
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = PH.id_shooting_do;

работает, обновляет все записи и верно выставляет значения. Пытаюсь обернуть это в триггер и не работает

   if tg_op = 'DELETE' then
 UPDATE ksapp_shooting_do SH
 SET last_frame_photo_editing = 'delete'
 FROM ksapp_photo_editing PH
 WHERE SH.id = old.PH.id_shooting_do;
 return old;
   else
UPDATE ksapp_shooting_do SH
SET last_frame_photo_editing = PH.last_frame_number
FROM ksapp_photo_editing PH
WHERE SH.id = new.PH.id_shooting_do;
return new;
old и new относятся к обновляемой таблице, вы пытаетесь через них обратиться к PH- таблице из которой обновляете, это нарушение логики) Плюс синтаксис неверный , не нужно писать псевдоним таблицы после old и new, просто: old.id, например

И лучше пишите ошибку всегда, если таковая вываливается)
источник

R

Rustam in pgsql – PostgreSQL
ошибка вообще оч странная, ни о чем не говорит, типо null null.
вроде понимаю, что псевдонимы могут мешать, но не пойму как без них можно указать, что бы взять данные с новый записи таблицы 2 и записать по этому id в таблицу 1
источник

ГА

Георгий Ава... in pgsql – PostgreSQL
Rustam
ошибка вообще оч странная, ни о чем не говорит, типо null null.
вроде понимаю, что псевдонимы могут мешать, но не пойму как без них можно указать, что бы взять данные с новый записи таблицы 2 и записать по этому id в таблицу 1
Текущая новая строка new старая old
источник

АГ

Алина Головлева... in pgsql – PostgreSQL
Rustam
ошибка вообще оч странная, ни о чем не говорит, типо null null.
вроде понимаю, что псевдонимы могут мешать, но не пойму как без них можно указать, что бы взять данные с новый записи таблицы 2 и записать по этому id в таблицу 1
так же как в запросе без триггера, значит, у вас лишний не псевдоним ph, а old и new. Скажите на какую таблицу вы вешаете триггер? Что хранится в old и new на момент вызова триггера,потому что сейчас это неясно
источник

R

Rustam in pgsql – PostgreSQL
ksapp_photo_editing  в теории на  2 таблицу куда будет записываться запись которую нужно передать
источник

R

Rustam in pgsql – PostgreSQL
в таком виде работает ошибки нет,  но не происходит обновление данных (если запись удалили или поменял)

   if tg_op = 'DELETE' then
UPDATE ksapp_shooting_do
SET last_frame_photo_editing = 'delete'
WHERE id = old.id_shooting_do;
return old;
   else
UPDATE ksapp_shooting_do
SET last_frame_photo_editing = last_frame_number
WHERE id = new.id_shooting_do;
return new;
источник

M

Me👀 in pgsql – PostgreSQL
Народ, а вложенные функции - это норм или костыль? У меня просто одна функция, хочу в ней еще одну объявить ив завсмости от вводных дулать IF .. ELSE и вызывать вложенную функцию с другими параметрами)
источник

ВК

Владимир Кузовкин... in pgsql – PostgreSQL
Коллеги,приветствую всех!!!!
источник

ВК

Владимир Кузовкин... in pgsql – PostgreSQL
скажите, тут можно задавать вопросы по структурам баз данных?
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Me👀
Народ, а вложенные функции - это норм или костыль? У меня просто одна функция, хочу в ней еще одну объявить ив завсмости от вводных дулать IF .. ELSE и вызывать вложенную функцию с другими параметрами)
объявить ф-цию внутри другой не выйдет ( если мы про PL/pgSQL ),  вызвать — пожалуйста
источник

VY

Victor Yegorov in pgsql – PostgreSQL
Владимир Кузовкин
скажите, тут можно задавать вопросы по структурам баз данных?
источник

M

Me👀 in pgsql – PostgreSQL
Victor Yegorov
объявить ф-цию внутри другой не выйдет ( если мы про PL/pgSQL ),  вызвать — пожалуйста
Засада) прийдется выносить их значит)
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
Rustam
в таком виде работает ошибки нет,  но не происходит обновление данных (если запись удалили или поменял)

   if tg_op = 'DELETE' then
UPDATE ksapp_shooting_do
SET last_frame_photo_editing = 'delete'
WHERE id = old.id_shooting_do;
return old;
   else
UPDATE ksapp_shooting_do
SET last_frame_photo_editing = last_frame_number
WHERE id = new.id_shooting_do;
return new;
поле ID - это же PK. разве его можно обновлять? нет...
источник

SS

Shamil Sabirov in pgsql – PostgreSQL
или я чето не понял
источник

R

Rustam in pgsql – PostgreSQL
Shamil Sabirov
поле ID - это же PK. разве его можно обновлять? нет...
PK не обновляем, только используем для связи
источник