Мониторинг поля БД Postgresql

157
11 апреля 2019, 19:40

ситуация вот какая: есть таблица в бд Postgresql,в ней есть поле "статус". Требуется выполнить некий кусок Java-кода, при любом изменении статуса. Подскажите, пожалуйста, какими средствами можно это сделать?

Answer 1

Можно создать триггер в базе:

CREATE OR REPLACE FUNCTION notify() RETURNS TRIGGER AS $$
    BEGIN
        SELECT pg_notify('status', TG_TABLE_NAME);
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER table_change 
AFTER UPDATE OF STATUS ON table_name
FOR EACH ROW EXECUTE PROCEDURE notify();

А на стороне Java приложения слушать это событие при помощи (pgjdbc-ng-0.6-complete.jar):

import com.impossibl.postgres.api.jdbc.PGConnection;
import com.impossibl.postgres.api.jdbc.PGNotificationListener;
import com.impossibl.postgres.jdbc.PGDataSource;    
import java.sql.Statement;
public static void listenToMessage(){
    PGDataSource dataSource = new PGDataSource();
    dataSource.setHost("localhost");
    dataSource.setPort(5432);
    dataSource.setDatabase("database_name");
    dataSource.setUser("user");
    dataSource.setPassword("password");
    PGNotificationListener listener = (int processId, String channelName, String payload) 
        -> System.out.println(payload);
    try (PGConnection connection = (PGConnection) dataSource.getConnection();
        Statement statement = connection.createStatement()){
        statement.execute("LISTEN status");
        connection.addNotificationListener(listener);
        while (<условие закрытия соединения>){ }
    } catch (Exception e) {
        System.err.println(e);
    }
}
READ ALSO
Запрос по JDBC только для одного потока

Запрос по JDBC только для одного потока

Есть два потока, которые обращаются к одному классу, который делает запрос в БДМне необходимо сделать так, что бы они физически не могли сделать...

147
Анимация градиента SVG под углом

Анимация градиента SVG под углом

Как правильно реализовать анимацию градиента SVG элемента под углом и с задержкой?

228
CSS - градиент на background

CSS - градиент на background

Есть рабочий код:

181
Как изменить свойство модели на которую ссылаешься?

Как изменить свойство модели на которую ссылаешься?

Пишу приложение, в котором есть тренировки, состоящие из упражненийСоздаю такие модели:

170