PostgreSQL 登陆登出(login logout)事件触发方法

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
云原生数据库 PolarDB 分布式版,标准版 2核8GB
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

标签

PostgreSQL , 事件触发器 , event trigger , hook , login hook , libpq


背景

PostgreSQL 支持event trigger,但是event局限于DDL。当发生DDL时,可以触发一些动作调用用户自定义的event trigger函数,函数内容随意,比如审计,比如DDL逻辑复制,比如权限控制等。

对事件触发器感兴趣可以见我的GITHUB。

《PostgreSQL 登陆登出(login logout)事件触发方法》

《PostgreSQL 事件触发器应用 - DDL审计记录 + 异步通知(notify)》

《PostgreSQL Oracle 兼容性之 - 事件触发器实现类似Oracle的回收站功能》

《use event trigger function record user who alter table's SQL》

《PostgreSQL 事件触发器 - DDL审计 , DDL逻辑复制 , 打造DDL统一管理入》

《PostgreSQL 事件触发器 - PostgreSQL 9.3 Event Trigger》

接下来的问题是,当用户想在登陆数据库,退出数据库时触发一些UDF调用,该怎么办呢?

这里举个例子,多个业务,采用同一个数据库用户登陆,有TP型的业务,有AP型的业务。

为了防止TP AP互相干扰,

1、没有办法通过数据库用户配置来隔离,因为他们用了同一个用户。(当然,如果业务上可以使用不同的数据库用户,那么隔离就变得更加简单了,比如通过connection limit配置AP少量连接。)

2、如果通过业务层面的修改来设置参数,可以,但是可能需要动到业务。

其他的方法:

1、应用程序连接串,配置一些可配置参数。

对于AP业务,配置它的连接串。比如lock timeout, statement timeout, work_mem等,可以配大一些。

TP业务配置它的连接串。

2、应用程序连接串(libpq, jdbc等),配置识别参数application_name,比如TP配置为tp, AP配置为ap.

https://www.postgresql.org/docs/10/static/libpq-connect.html#LIBPQ-CONNSTRING

http://www.postgresqltutorial.com/postgresql-jdbc/

当连接到数据库时,通过application_name的值可以识别出来这个连接是AP连接的还是TP业务连接的。

3、结合HOOK,就可以实现登陆、退出的事件触发。

HOOK patch :

https://www.postgresql.org/message-id/flat/4EBC6852.5030605%40fuzzy.cz#4EBC6852.5030605@fuzzy.cz

HOOK 插件 :

https://github.com/pgaudit/set_user

4、除此之外,阿里云RDS PG提供了内置的资源隔离能力

《阿里云 RDS PostgreSQL 高并发特性 vs 社区版本 (1.6万并发: 3倍吞吐,240倍响应速度)》

参考

https://www.postgresql.org/docs/10/static/event-trigger-definition.html

《PostgreSQL HooK 介绍》

https://www.postgresql.org/docs/10/static/libpq-connect.html#LIBPQ-CONNSTRING

http://www.postgresqltutorial.com/postgresql-jdbc/

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
SQL 关系型数据库 分布式数据库
PostgreSQL 在线修改数据类型 - online ddl 方法之一
标签 PostgreSQL , online ddl , trigger , ddl 事务 背景 有张表的主键id是serial,但现在不够了,需要升级成bigserial,有什么优雅的方法吗?我看下来好像会锁表很久(因为数据量挺大) 如果直接alter table,由于数据类型从4字节改成了8字节,而tuple结构是在METADATA里面的,不是每行都有,所以DEFORM需要依赖METADATA,目前来说,这种操作需要rewrite table。
3624 0
|
关系型数据库 数据挖掘 数据库
PostgreSQL 模糊查询最佳实践 - (含单字、双字、多字模糊查询方法)
PostgreSQL 模糊查询最佳实践 - (含单字、双字、多字模糊查询方法)https://github.com/digoal/blog/blob/master/201704/20170426_01.md
13637 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL命令行方式登陆数据库
PostgreSQL命令行方式登陆数据库
346 0
|
监控 关系型数据库 测试技术
PostgreSQL 双节点流复制如何同时保证可用性、可靠性(rpo,rto) - (半同步,自动降级方法实践)
PostgreSQL 双节点流复制如何同时保证可用性、可靠性(rpo,rto) - (半同步,自动降级方法实践)
1156 0
|
弹性计算 监控 关系型数据库
PostgreSQL 双节点流复制如何同时保证可用性、可靠性(rpo,rto) - (半同步,自动降级方法实践)
标签 PostgreSQL , 同步 , 半同步 , 流复制 背景 两节点HA架构,如何做到跨机房RPO=0(可靠性维度)?同时RTO可控(可用性维度)? 半同步是一个不错的选择。 1、当只挂掉一个节点时,可以保证RPO=0。如下: 主 -> 从(挂) 主(挂) -> 从 2、当一个节点挂掉后,在另一个节点恢复并开启同步模式前,如果在此期间(
2066 0
|
关系型数据库 数据库 PostgreSQL
PostgreSQL 粗心设错session_preload_libraries的补救方法
标签 PostgreSQL , session_preload_libraries , psql: FATAL: could not access file "pg_pathman": No such file or directory 背景 由于粗心,设错了session_preload_l...
1678 0
|
SQL 关系型数据库 网络安全
PostgreSQL 大版本升级方法之一 - 不落地并行导出导入
标签 PostgreSQL , 大版本升级 , rds_dbsync , pg_dump , pg_restore 背景 尽量快的大版本升级的方法。 一、9.4以下版本,使用pg_dump并行导出,pg_restore并行导入,迁移 (导出使用源版本pg_dump,导入使用目标版本pg_restore。
1918 0
|
SQL 关系型数据库 数据库
PostgreSQL 设计优化case - 大宽表任意字段组合查询索引如何选择(btree, gin, rum) - (含单个索引列数超过32列的方法)
标签 PostgreSQL , adhoc查询 , 大宽表 , 任意字段组合查询 , 索引 , btree , gin , rum 背景 大宽表,任意字段组合查询,透视。是实时分析系统中的常见需求: 1、实时写入。
2472 0

相关产品

  • 云原生数据库 PolarDB