powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TFDEventAlerter + postgress. Не приходят сообщения.
8 сообщений из 8, страница 1 из 1
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094634
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Может будут идеи. Добавил триггерную процедуру в PG:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE OR REPLACE FUNCTION public.notify_object_inserted()
  RETURNS trigger AS
$BODY$
DECLARE
BEGIN
  PERFORM pg_notify(
    'object_inserted'::text,
    json_build_object(NEW.object_uid, NEW.user_uid)::text);
  RETURN NEW;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION public.notify_object_inserted()
  OWNER TO test_user;


CREATE TRIGGER notify_object_inserted
  AFTER INSERT
  ON public.objects
  FOR EACH ROW
  EXECUTE PROCEDURE public.notify_object_inserted();



Код:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
var
  FDEventAlerter1: TFDEventAlerter;

  FDEventAlerter1 := TFDEventAlerter.Create(Self);

  FDEventAlerter1.Name := 'FDEventAlerter1';
  FDEventAlerter1.Connection := FDConnection5;
  FDEventAlerter1.Names.Clear;
  FDEventAlerter1.Names.Add('object_inserted');
  FDEventAlerter1.OnAlert := FDEventAlerter1Alert;

  FDEventAlerter1.Active := True;
  FDEventAlerter1.Register;



Окружение. Delphi 10.4.2, Linux(Ubunta). База работает на удаленном ПК, ошибок нет. Всё корректно добавляется в таблицу, однако сообщений не видно.
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094781
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я PG не знаю, но notify_object_inserted создается как функция, а вызывается как процедура.
И не нужно ли эти две строчки
makhaon
Код: pascal
1.
2.
  FDEventAlerter1.Active := True;
  FDEventAlerter1.Register;

поменять местами?
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094799
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

вызов там верный. иначе бы не добавилось вообще скорее всего. делал по образцу:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
-- Notify when record was inserted into 'prices' table
CREATE OR REPLACE FUNCTION notify_pricesinserted()
  RETURNS trigger AS $$
DECLARE
BEGIN
  PERFORM pg_notify(
    CAST('pricesinserted' AS text),
    row_to_json(NEW)::text);
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER notify_pricesinserted
  AFTER INSERT ON prices
  FOR EACH ROW
  EXECUTE PROCEDURE notify_pricesinserted();



посмотрел по коду, Register можно вообще убрать, потому что Active = True именно Register и делает.
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094805
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

А коммит делаешь? Обычно события приходят только после коммита.
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094818
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

да. коммит есть, данные в базе видны. но сообщений - никак пока...
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094819
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

А попробуй в отдельном подключении выполнить
Код: sql
1.
LISTEN object_inserted;

Будут события приходить?
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40094875
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
makhaon,

А попробуй в отдельном подключении выполнить
Код: sql
1.
LISTEN object_inserted;

Будут события приходить?


Онлайн события в консоль psql не приходят. Не знаю, должны ли. Но оффлайн приходят. Как это проявляется.

набираю:
LISTEN object_inserted;
консоль отвечает:
LISTEN
вставляю запись в нужную таблицу. в консоли ничего не происходит
повторно в консоли набираю LISTEN object_inserted;
в консоли:
LISTEN
Asynchronous notification "object_inserted" with payload "{"510" : null}" received from server process with PID 693840.
...
Рейтинг: 0 / 0
TFDEventAlerter + postgress. Не приходят сообщения.
    #40095084
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашел таки что не так: надо было отключить Synchronize. синхронизация не работает в линуксе. соответственно BasePerform не выполняется никогда:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
function TFDPhysEventMessage.Perform(AThread: TFDThread): Boolean;
begin
  FMsgThread := AThread as TFDPhysEventThread;
  if FMsgThread.Active then begin
    if FMsgThread.FAlerter.GetOptions.Synchronize then
      TFDThread.Queue(nil, BasePerform)
    else
      BasePerform;
  end;
  Result := True;
end;
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TFDEventAlerter + postgress. Не приходят сообщения.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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