合 在PG数据库中如何实现可以查看表的创建时间、修改时间、VACUUM、分析时间等DDL时间?
Tags: PGPostgreSQLDDL创建时间修改时间
简介
相信用过GP数据库的DBA们都用过pg_stat_last_operation或者pg_stat_last_shoperation这两个系统表去查看数据库对象的元数据信息。pg_stat_last_operation主要是跟踪记录表和视图的元数据信息,pg_stat_last_shoperation则是跟踪记录角色和表空间的元数据信息。 具体可以参考:https://www.dbaup.com/greenplumchakanbiaodechuangjianshijian.html#zong_jie
但是在PG数据库中是没有这两个系统表的,所以每次要查找表的创建及其他信息不是凭记忆力就是一一查看日志记录,如果时间久远的话工作量就相对较大了。那么怎么才能实现和GP类似的效果呢?
实验
以下实验基于PostgreSQL 12.11版本
创建记录DDL语句的表
1 2 3 4 5 6 7 8 | CREATE TABLE pg_stat_last_operation ( id serial PRIMARY KEY, object_type text, schema_name VARCHAR(50), action_name name NOT NULL, object_identity text, statime timestamp with time zone ); |
创建记录DDL语句的函数get_object_time_func
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | CREATE OR REPLACE FUNCTION get_object_time_func() RETURNS event_trigger LANGUAGE plpgsql AS $$ DECLARE obj record; BEGIN FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands () LOOP INSERT INTO public.pg_stat_last_operation (object_type, schema_name,action_name,object_identity,statime) SELECT obj.object_type, obj.schema_name, obj.command_tag,obj.object_identity,now(); END LOOP; END; $$; CREATE FUNCTION |