GreenPlum/PostGreSQL 通过“表磁盘存储文件“获取表最后“更新时间“

Posted DATA数据猿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GreenPlum/PostGreSQL 通过“表磁盘存储文件“获取表最后“更新时间“相关的知识,希望对你有一定的参考价值。

GreenPlum/PostGreSQL 通过"表磁盘存储文件"获取表最后"更新时间"

一、获取tabledir、filenode

current_setting()可以获取数据路径

pg_relation_filepath()可以通过oid获取文件路径

pg_relation_filenode()可以将oid转化为relfilenode

SELECT regexp_replace(current_setting('data_directory') || '/' || pg_relation_filepath(c.oid),pg_relation_filenode(c.oid) || '$',''),
pg_relation_filenode(c.oid)
from pg_class c 
join pg_namespace ns on c.relnamespace=ns.oid and c.relname = 'tablename' and ns.nspname = 'schemaname';

二、通过tabledir、filenode查看最后access_time和modified_time

pg_stat_file()获取文件的信息

pg_ls_dir()读取系统目录结构

select max((pg_stat_file(tabledir || filename)).access),
	max((pg_stat_file(tabledir || filename)).modification)
from pg_ls_dir(tabledir) as filename
where filename ~ ('^' || filenode || '([.]?[0-9]+)?$');

三、创建函数

create or replace function ods.table_access_change_info(
IN schemaname text,
IN tablename text,
OUT last_access timestamp with time zone,
OUT last_change timestamp with time zone
)
language plpgsql 
AS $function$
declare 
    tabledir text;
    filenode text;
begin
	-- 获取tabledir,filenode
	SELECT regexp_replace(current_setting('data_directory') || '/' || pg_relation_filepath(c.oid),pg_relation_filenode(c.oid) || '$',''),
	pg_relation_filenode(c.oid)
	into tabledir,filenode 
	from pg_class c 
	join pg_namespace ns on c.relnamespace=ns.oid and c.relname = tablename and ns.nspname = schemaname;
	
	-- 提示
	raise notice 'tabledir:% - filenode : %',tabledir,filenode;

	--根据tabledir,filenode获取last_accesstime,last_changetime
	select max((pg_stat_file(tabledir || filename)).access),
	     max((pg_stat_file(tabledir || filename)).modification)
	     INTO last_access, last_change
	from pg_ls_dir(tabledir) as filename
	where filename ~ ('^' || filenode || '([.]?[0-9]+)?$');
END;
$function$;

以上是关于GreenPlum/PostGreSQL 通过“表磁盘存储文件“获取表最后“更新时间“的主要内容,如果未能解决你的问题,请参考以下文章

Greenplum(PostgreSql)函数实现批量删除表

GreenPlum/PostgreSQL 创建函数返回数据集

在Greenplum(PostgreSQL)表中查询出所有包含emoji符号的数据

在Greenplum(PostgreSQL)表中查询出所有包含emoji符号的数据

在 Greenplum/Postgresql 数据库上使用 java 驱动程序创建序列不起作用

无法从 Windows 上的 pgadmin 连接到 greenplum postgresql