-- 一、现有函数
-- 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函数:满足特定格式的表及指定日期前的删除的更多相关文章

  1. postgresql 函数 参数为复合类型

    postgresql没有存储过程,但是函数功能很强大. 在近期开发的电商管理平台中,对于产品的类目管理,设计时有个属性字段,设为字符数组,但是EF不支持数组的操作,所以在添加和修改类目时,需要对属性的 ...

  2. PostgreSQL EXPLAIN执行计划学习--多表连接几种Join方式比较

    转了一部分.稍后再修改. 三种多表Join的算法: 一. NESTED LOOP: 对于被连接的数据子集较小的情况,嵌套循环连接是个较好的选择.在嵌套循环中,内表被外表驱动,外表返回的每一行都要在内表 ...

  3. 第四十二节,configparser特定格式的ini配置文件模块

    configparser用于处理特定格式的文件,其本质上是利用open来操作文件. 特定格式的ini配置文件模块,用于处理ini配置文件,注意:这个ini配置文件,只是ini文件名称的文本文件,不是后 ...

  4. strncmp函数——比较特定长度的字符串

    strncmp函数用于比较特定长度的字符串. 头文件:string.h. 语法  int strncmp(const char *string1, const char *string2, size_ ...

  5. Oracle中使用游标转换数据表中指定字段内容格式(拼音转数字)

    应用场景:将数据表TB_USER中字段NNDP的内容中为[sannanyinv]转换为[3男1女] 主要脚本:一个游标脚本+分割字符串函数+拼音转数字脚本 操作步骤如下: 1.创建类型 create ...

  6. PostgreSQL自学笔记:6 PostgreSQL函数

    6 PostgreSQL函数 6.2 数学函数 abs(x) 绝对值 pi() 圆周率π select abs(-3),pi(); cookie: MySQL中的pi()默认值3.141593, Po ...

  7. PostgreSQL函数(存储过程)----笔记

    PostgreSQL 函数也称为 PostgreSQL 存储过程. PostgreSQL 函数或存储过程是存储在数据库服务器上并可以使用SQL界面调用的一组SQL和过程语句(声明,分配,循环,控制流程 ...

  8. PostgreSQL函数如何返回数据集 [转]

    PostgreSQL函数如何返回数据集 以下主要介绍PostgreSQL函数/存储过程返回数据集,或者也叫结果集的示例. 背景: PostgreSQL里面没有存储过程,只有函数,其他数据库里的这两个对 ...

  9. Txt格式配置表无法解析的问题——BOM

    今天再次遇到同一个问题:策划给来一个Txt格式配置表,我用解析类去读取,返回的结果为空.解析类参数是:主键key,文件名fileName,错误提示errorTip. 写读取语句的时候,主键key我是直 ...

  10. 第八十八天请假 PHP smarty模板 变量调节器,方法和块函数基本书写格式

    变量调节器 : 文件命名格式(modifier.名称.php)  前端调用方式<{变量|名称:参数:参数……}>可组合使用,用|隔开 <?php /* 命名格式 smarty_mod ...

随机推荐

  1. 谷歌MapReduce经典论文翻译(中英对照)

    MapReduce: Simplified Data Processing on Large Clusters(MapReduce: 简化大型集群下的数据处理) 作者:Jeffrey Dean and ...

  2. 2.2 virtualenv 虚拟环境

    有的时候因为各种原因,在操作系统下,我们会安装很多版本的Python解释器.同样,我们也有可能因为各种原因,需要不同版本的模块,比如Django1.8,Django1.11.再加上pip工具管理器的版 ...

  3. 图解 Kubernetes Ingress

    文章转载自:https://www.qikqiak.com/post/visually-explained-k8s-ingress/ 原文链接: https://codeburst.io/kubern ...

  4. Centos7搭建 KVM 环境

    注意:使用KVM管理虚拟机分命令行和图形化界面两种方式,这里最后一步安装的工具是图形化管理工具 安装前准备 验证CPU是否支持KVM 如果结果中有vmx(Intel)或svm(AMD)字样,就说明CP ...

  5. centos7使用yum方式安装MySQL5.7

    yum -y localinstall http://mirrors.ustc.edu.cn/mysql-repo/mysql57-community-release-el7.rpm yum inst ...

  6. 使用Recoding Rules优化性能

    通过PromQL可以实时对Prometheus中采集到的样本数据进行查询,聚合以及其它各种运算操作.而在某些PromQL较为复杂且计算量较大时,直接使用PromQL可能会导致Prometheus响应超 ...

  7. 组合总和 II

    组合总和 II 题目介绍 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合. candidates ...

  8. [CG从零开始] 5. 搞清 MVP 矩阵理论 + 实践

    在 4 中成功绘制了三角形以后,下面我们来加载一个 fbx 文件,然后构建 MVP 变换(model-view-projection).简单介绍一下: 从我们拿到模型(主要是网格信息)文件开始,模型网 ...

  9. Nebula Graph介绍和SpringBoot环境连接和查询

    Nebula Graph介绍和SpringBoot环境连接和查询 转载请注明来源 https://www.cnblogs.com/milton/p/16784098.html 说明 当前Nebula ...

  10. 【python】Ubuntu中多条命令的运行

    在模型训练时,往往需要消融实验,通常都是在一个程序运行结束后才再次手动运行下一个,不及时在电脑前可能无端浪费时间,因此需要让程序自动一个接一个去执行.受此启发,特了解了Ubuntu中多命令运行的内容. ...