Java实现postgre数据库每日定时自动备份

news/2024/12/5 13:02:54/

前提:该备份仅为同数据库不同schema备份

假设需要备份的数据库为test,schema为public。代码如下

 public void backupAllTables() {log.info("备份全表开始执行" + System.currentTimeMillis());String origScheme1 = "public";String origScheme = "\"" + "public" + "\"";//获取数据库中所有的表List<String> allTable = SQL1.getAllTable(origScheme1);log.info(String.join(",", allTable));String date = date();//备份出来的样式为 b20230818String schemeName = "\"b" + date + "\"";String fiveDaysAgo = "\"b" + date_Plus(-5, "yyyyMMdd") + "\"";//删除5天前的这个备份SQL2.dropSchemeIfExist(fiveDaysAgo);//删除今天的备份避免重复备份SQL2.dropSchemeIfExist(schemeName);SQL3.createScheme(schemeName);if (!CollectionUtils.isEmpty(allTable)) {List<String> list = Arrays.asList("不需要备份的表1", "2023年8月18日发表于CSDN", "不需要备份的表2", "不需要备份的表3", "CSDN作者 weixin_43620015");allTable.removeAll(list);for (String t : allTable) {String finalT = "\"" + t + "\"";//此方法为从原SCHEMA复制到新的SHHEMASQL4.copyTable(origScheme, schemeName, finalT, finalT);}}log.info("备份全表执行完毕" + System.currentTimeMillis());}
//下面两个方法为工具类
//2023年8月18日 17:34:49 CSDN weixin_43620015public static String date() {LocalDateTime localDateTime = LocalDateTime.now();String res;DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");res = dateTimeFormatter.format(localDateTime);return res;}public static String date_Plus(int num, String pattern) {LocalDateTime now = LocalDateTime.now();LocalDateTime localDateTime = now.plusDays(-5);String res;DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(pattern);res = dateTimeFormatter.format(localDateTime);return res;}

代码中对应位置的SQL语句

– SQL1

SELECT   c.relname AS tablename FROM pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespaceWHERE ((c.relkind = 'r'::"char") OR (c.relkind = 'f'::"char") OR (c.relkind = 'p'::"char"))AND n.nspname = #{schemeName}

SQL2 注意其中要为$符号

DROP SCHEMA if EXISTS ${schemeName}  CASCADE;

SQL3 注意其中要为$符号

CREATE SCHEMA  ${schemeName} ;

SQL4 注意其中要为$符号SQL4为主要SQL

drop table if EXISTS  ${news}.${newt}  CASCADE;
create table  ${news}.${newt} (like  ${olds}.${oldt} including all);
insert into   ${news}.${newt} SELECT * from ${olds}.${oldt} ;

效果图如下
在这里插入图片描述
新的SCHEMA中包含所有的表


http://www.ppmy.cn/news/1042091.html

相关文章

统计XML标注文件中各标注类别的标签数量

目标检测任务重&#xff0c;担心数据集中各标签类别不均衡&#xff0c;想统计XML标注文件中各标注类别的标签数量&#xff0c;可以使用以下脚本&#xff1a; import os import glob import xml.etree.ElementTree as etdef count_labels(source_dir):file_list glob.glob(os.…

使用GEWE框架进行个人微信收藏夹及标签管理(标签篇)适用于微信群管、社群管理

友情链接 geweapi.com 点击即可访问&#xff01; 添加标签 简要描述&#xff1a; 添加自定义标签 注意[name] 请求URL&#xff1a; http://域名地址/api/label/add 请求方式&#xff1a; POST 请求头&#xff1a; Content-Type&#xff1a;application/json 参数&#…

Open3D点云数据处理(二十):最小二乘直线拟合(三维)

文章目录 1 最小二乘三维直线拟合原理2 代码实现3 直线拟合的评估指标4 计算拟合的评估指标5 np.linalg.lstsq() 函数详解专栏目录:Open3D点云数据处理(Python) 1 最小二乘三维直线拟合原理 最小二乘三维直线拟合的原理是通过最小化数据点到直线距离的平方和,找到最优的直…

使用dockerfile手动构建JDK11镜像运行容器并校验

Docker官方维护镜像的公共仓库网站 Docker Hub 国内无法访问了&#xff0c;大部分镜像无法下载&#xff0c;准备逐步构建自己的镜像库。【转载aliyun官方-容器镜像服务 ACR】Docker常见问题 阿里云容器镜像服务ACR&#xff08;Alibaba Cloud Container Registry&#xff09;是面…

速卖通、阿里国际站需不需要测评?补单或许能带来意想不到的效果

今天和各位聊聊速卖通和阿里国际站&#xff0c;不管新卖家或者老买家都会遇到的各种问题。 首先聊一下新卖家&#xff0c;新卖家店铺刚开&#xff0c;产品先尽可能的去铺开&#xff0c;把店铺规划好&#xff0c;然后就是坐等开单&#xff0c;前期产品上传上去之后是不是感觉流…

Android 13像Settings一样获取SIM卡信息

一.背景 由于客户定制的Settings里面需要获取到SIM卡信息,所以需要实现此功能。 目录 一.背景 二.前提条件 三.调用api 二.前提条件 首先应用肯定要是系统应用,并且导入framework.jar包,具体可以参考: Android 应用自动开启辅助(无障碍)功能并使用辅助(无障碍)功能_…

【学会动态规划】最长湍流子数组(23)

目录 动态规划怎么学&#xff1f; 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后&#xff1a; 动态规划怎么学&#xff1f; 学习一个算法没有捷径&#xff0c;更何况是学习动态规划&#xff0c; 跟我…

Android进阶之多级列表

遇到一个需求需要显示多级列表&#xff0c;因为界面是在平板上的&#xff0c;所以层级是从左向右往下排的&#xff0c;类似于 我当时的写法是在xml布局里一个个RecyclerView往下排的 当然前提是已经规定好最大的层级我才敢如此去写界面&#xff0c;如果已经明确规定只有两级或…