Comments 7
А что, пулами соединений больше не принято пользоваться? И слово "middleware" больше не нужно?
Наверное и с пулами соединений от триггера на login может быть польза. С большой корпоративной БД могут работать сразу несколько приложений, каждое со своим пулом/middleware. Тогда в on-login можно настраивать пулы сеансов каждого приложения.
On-Lgin триггер точно также будет срабатывать, когда соединение впервые открывается в пуле соединений. И в таком триггере Вы можете определить проверки, которые должны быть выполнены в момент создания пула соединений. Поэтому, On-Login триггер вполне востребован и для серверов приложений.
On-Login триггер в СУБД Postgres Pro Enterprise, так же как и в Oracle Database, является одним из видов триггеров событий базы данных
Как-то возникают вопросы к терминологии. Внешний пользователь всё-таки подключается к серверу БД. Это только потом для него устанавливается текущая БД. Формально события логона - это событие уровня сервера, а установление текущей БД для соединения, во время которого и срабатывает триггер - это уже процесс настройки контекста по факту выполнения аутентификации.
Возможно, такая терминология полностью легальна для Постгресса, где подключение ограничено текущей базой данных, и в другую БД можно обратиться только через расширения типа dblink или fdw. Да, поскольку любое такое расширение устанавливает отдельное соединение, вероятно, на это событие тоже срабатывает on-login триггер?
И ещё не освещённые в статье вопросы - а где именно регистрируется такой триггер, объектом чего он является? объектом конкретной базы данных, или же объектом системной БД? И переносится ли он в составе бэкапа отдельной базы данных?
Внешний пользователь всё-таки подключается к серверу БД.
Настройка подключения именно к серверу выполняется в pg_hba.conf. Триггер on-login срабатывает позже.
Это только потом для него устанавливается текущая БД.
После pg_hba.conf еще проверяется разрешение на подключение к указанной базе данных и только потом сработает on-login. Такая вот цепочка.
... в другую БД можно обратиться только через расширения типа dblink или fdw. Да, поскольку любое такое расширение устанавливает отдельное соединение, вероятно, на это событие тоже срабатывает on-login триггер?
Всё верно. Когда dblink или postgres_fdw подключаются к удаленной БД с триггером on-login, то триггер сработает.
...а где именно регистрируется такой триггер, объектом чего он является? И переносится ли он в составе бэкапа отдельной базы данных?
Триггер и триггерная функция регистрируются в системном каталоге конкретной базы данных данных. И они попадут в резервную копию этой БД.
В 17 postgresql добавили нативное событие логина
Использование On-Logon триггеров в СУБД Postgres Pro Enterprise