Russian Qt Forum
Апрель 20, 2024, 10:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] NOTIFY с аргументом в PostgreSQL  (Прочитано 9556 раз)
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« : Февраль 03, 2015, 09:28 »

Коллеги,
нужно в уведомлении NOTIFY передать, к примеру, значение поля для добавленной записи таблицы.
Примерно так:
Код:
CREATE FUNCTION wrequest_notify() RETURNS trigger AS $$
  BEGIN
NOTIFY wrequested, '1234';
RETURN NULL;
  END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER wrequest_after
AFTER  INSERT
ON wrequest
FOR EACH ROW
EXECUTE PROCEDURE wrequest_notify();
Обработка уведомлений в программе - http://majestio.tk/viewtopic.php?pid=38#p38
Только нужно передать не константу ('1234'), а значение переменной, например,
Код:
	NOTIFY wrequested, NEW.requestid;
но такое не допускается синтаксисом. Наверное, здесь могло бы помочь что-то типа макроподстановки. А как?
« Последнее редактирование: Февраль 03, 2015, 12:22 от sergek » Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Февраль 03, 2015, 10:06 »

Кастуйте ее строку и передавайте.
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #2 : Февраль 03, 2015, 11:15 »

Если вы имеете в виду
Код:
NOTIFY wrequested, CAST(123 as varchar(10));
то пробовал, дает:
Код:
ОШИБКА:  ошибка синтаксиса (примерное положение: "CAST")
LINE 3:  NOTIFY wrequested, CAST(123 as varchar(10));
                            ^
********** Ошибка **********

ОШИБКА: ошибка синтаксиса (примерное положение: "CAST")
SQL-состояние: 42601
Символ: 85
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Февраль 03, 2015, 11:49 »

Вот так отправляйте:
PERFORM pg_notify( wrequested, param );

Где param - VARCHAR.
Записан
Johnik
Крякер
****
Offline Offline

Сообщений: 339


Просмотр профиля
« Ответ #4 : Февраль 03, 2015, 11:57 »

Код:
ОШИБКА:  ошибка синтаксиса (примерное положение: "CAST")
LINE 3:  NOTIFY wrequested, CAST(123 as varchar(10));
                            ^
********** Ошибка **********

ОШИБКА: ошибка синтаксиса (примерное положение: "CAST")
SQL-состояние: 42601
Символ: 85
в pgsql кастуется по-другому:
Код:
select 123::varchar(10)
Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 870


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #5 : Февраль 03, 2015, 12:22 »

Спасибо огромное!
Вот окончательный вариант:
Код:
CREATE FUNCTION wrequest_notify() RETURNS trigger AS $$
  BEGIN
        PERFORM pg_notify( 'wrequested', NEW.requestid::varchar(10) );
RETURN NULL;
  END;
$$ LANGUAGE plpgsql;
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #6 : Февраль 03, 2015, 15:40 »

Спасибо огромное!
Я делаю следующим образом: первый параметр это название таблицы, а второй собирается из типа операции над записью и ее id.
Например:
"I:1010" - добавлена запись с id = 1010 (отправляется после добавления)
"U:100500" - обновлена запись с id = 100500 (отправляется после обновления)
"D:321" - будет удалена запись с id = 321 (отправляется перед удалением)
"R" - необходимо обновить таблицу (отправляется после удаления)

Модели подписываются на уведомления от соответствующих им таблиц и обновляют свое состояние согласно уведомлениям. Оператор видит все изменения происходящие с таблицей.
« Последнее редактирование: Февраль 03, 2015, 15:59 от Old » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.049 секунд. Запросов: 22.