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符号的数据