首页 > 数据库 >postgresql函数:满足特定格式的表及指定日期前的删除

postgresql函数:满足特定格式的表及指定日期前的删除

时间:2022-11-05 22:34:54浏览次数:59  
标签:postgresql 删除 -- ods tablename 表及 ap 格式 select

-- 一、现有函数
-- 1、现有函数调用
select "ap"."delete_analysis_backup"('ap');
-- 2、函数内容
CREATE OR REPLACE FUNCTION "ap"."delete_analysis_backup"("schema_name" varchar)
RETURNS "pg_catalog"."void" AS $BODY$ DECLARE
row_tag VARCHAR ( 200 );
BEGIN-- Created by Liu Jinhui
FOR row_tag IN (
SELECT TABLE_NAME
FROM
(
SELECT
tablename AS TABLE_NAME,
( regexp_match ( tablename, 'analysis_[a-z,_]+_([0-9]{8,8})' ) ) [ 1 ] AS table_backup_time
FROM
pg_tables
WHERE
schemaname = schema_name
AND tablename SIMILAR TO 'analysis_[a-z,_]+_[0-9]{8,12}'
) A
WHERE
DATE_TRUNC( 'day', to_date( A.table_backup_time, 'yyyyMMdd' ) ) < DATE_TRUNC( 'day', now( ) + '-7 day' )
)
LOOP
RAISE notice'表名为:%',
row_tag;
EXECUTE concat ( 'drop table ', SCHEMA_NAME, '.', row_tag );END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
-- 二、依赖项
-- 要求:删除ods包含gyy的表,删除一个月
-- 函数头:del_special_struct(schema_name,period_saved,remark)
-- 调用:
select ods.del_special_struct('ap','1 days','删除以往的分析对象模型')
select ods.del_special_struct('ods','31 days','删除一个月之前的gyy物理备份表')-- 三、过程
-- 要求:删除ods包含gyy的表,删除一个月
-- 函数头:del_special_struct(schema_name,period_saved,remark)
-- 调用:
select ods.del_special_struct('ap','1 days','删除以往的分析对象模型');
select ods.del_special_struct('ods','31 days','删除一个月之前的gyy物理备份表');
-- 1、ap
CREATE OR REPLACE FUNCTION ods.del_special_struct(schema_name varchar,period_saved varchar,remark varchar)
RETURNS "pg_catalog"."void" AS $BODY$ DECLARE
BEGIN
if schema_name = 'ap' then
EXECUTE select "ap"."delete_analysis_backup"('ap');
else
-- gyy删除一个月前的表
end if;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100-- 2、ods的管易云删除逻辑
-- (1)查询出所有满足条件的表
select tablename,to_char(date(concat('20',split_part(tablename,'_20',2))),'yyyymmdd') as mon_day
from pg_tables
where schemaname = 'ods'
and tablename SIMILAR TO 'ods_trade_[a-z,_]+gyy_[2022][0-9,_]+'
and to_char(date(concat('20',split_part(tablename,'_20',2))),'yyyymmdd') < to_char(date_trunc('day',now())+'-30 days','yyyymmdd')
-- (2)删除表CREATE OR REPLACE FUNCTION ods.del_special_struct(schema_name varchar,period_saved varchar,remark varchar)
RETURNS "pg_catalog"."void" AS $BODY$ DECLARE
DECLARE arrat_t varchar[];
DECLARE dt_split INTERVAL='-' ||period_saved;
DECLARE tb_each VARCHAR;
DECLARE res VARCHAR;
BEGIN
if schema_name = 'ap' then
select ap.delete_analysis_backup('ap') into res;
else
-- gyy删除一个月前的表
-- 如果存在分区表,则删除对应的物理表
select array(
select tablename from (
select tablename,to_char(date(concat('20',split_part(tablename,'_20',2))),'yyyymmdd') as mon_day
from pg_tables
where schemaname = 'ods'
and tablename SIMILAR TO 'ods_trade_[a-z,_]+gyy_[2022][0-9,_]+'
and to_char(date(concat('202',split_part(tablename,'_202',2))),'yyyymmdd') < to_char(date_trunc('day',now())+dt_split,'yyyymmdd')
) all_table) into arrat_t;
foreach tb_each in array arrat_t
loop
EXECUTE format('DROP TABLE IF EXISTS %s.%s', schema_name,tb_each);
end loop;
end if;
END
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;

作者:哥们要飞

标签:postgresql,删除,--,ods,tablename,表及,ap,格式,select
From: https://blog.51cto.com/liujinhui/5826227

相关文章

  • PostgreSQL查看表结构语句
    参考​​https://www.modb.pro/db/60164​​在PG里面查看表结构,不如mysql那样showcreatetablexx这样方便。 在PG里面常用如下3种方法:第一种,最朴实的方法就是pg_dump......
  • python输出格式
    1,直接输出字符串和数字   语句                         结果            ......
  • vue2搭配vue-router3真正可用不报错的写法格式
    这里要吐槽下vue和vue-router的文档教程本身前端的版本就多,版本之间还各种不兼容,用法函数还多种多样,一会这个组件一会那里是按普通渲染,简直让人不知道按哪个才是对的。然......
  • [postgresql]用户管理
    前言PostgreSQL使用角色的概念管理数据库访问权限。角色是一系列相关权限的集合。为了管理方便,通常把一系列相关的数据库权限赋给一个角色,如果哪个用户需要这些权限,就把角......
  • 使用qcow2磁盘格式的文件作为Qemu根文件系统
    参考使用Qemu运行Ubuntu文件系统(1)qemu-img命令详解qemu-nbd简单操作操作创建qcow2格式文件qemu-imgcreate-fqcow2ubuntu22.qcow2100G挂载modprobenb......
  • 推荐一个可用的,能将喜马拉雅下载的xm格式转mp3的工具!
    会员快过期了,但书没听完。找了一个可用的能将喜马拉雅下载的xm格式转mp3的工具。mp3音频专辑下载:window版:https://jscs.lanzouw.com/insBf0f3tx1cmac版:https://jscs......
  • win格式化SD卡
    步驟1.在Windows10搜索框中輸入:cmd,右鍵單擊「以系統管理員身份執行」。步驟2.在命令提示字元,輸入:diskpart,然後按Enter。步驟3.輸入:listdisk,列出所有可用的磁碟機......
  • 6步解决 win7下使用TileStache生成geojson格式的Tiles
      有人说:一个人从1岁活到80岁很平凡,但如果从80岁倒着活,那么一半以上的人都可能不凡。生活没有捷径,我们踩过的坑都成为了生活的经验,这些经验越早知道,你要走的弯路就会越少......
  • php 解压zip 格式的文件
    <?php/***function:解压zip格式的文件*/classUnzip{publicfunction__construct(){//initcodehere...header("content-type......
  • 全局常量的统一,及在eleemnt-ui表格中的格式化
    在实际项目中遇到很多枚举的常量值,需要统一管理,在表格中需要把对应的值格式化成名称,以此记录:1.在utils文件夹新建globalData.ts文件,用于存放全局的常量:constgobalData......