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

news/2024/7/9 20:04:54 标签: java, 数据库, 开发语言, postgresql, navicat

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

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

java"> 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();
        //备份出来的样式为 b20230818
        String 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复制到新的SHHEMA
                SQL4.copyTable(origScheme, schemeName, finalT, finalT);
            }
        }
        log.info("备份全表执行完毕" + System.currentTimeMillis());
    }
//下面两个方法为工具类
//2023年8月18日 17:34:49 CSDN weixin_43620015
    public 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.relnamespace
 	WHERE ((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.niftyadmin.cn/n/4951911.html

相关文章

mybatis 批量插入和批量更新

一.批量插入 批量插入时&#xff0c;可以借助<foreach>标签构造多个数据执行插入 传入参数为List<Customer> 执行sql语句如下 <insert id"saveBatch" parameterType"java.util.List">insert into customer(name, password, age, weig…

计算机竞赛 协同过滤电影推荐系统

文章目录 1 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

Unreal Engine 测试总结

Android 项目打包应选择哪种纹理格式&#xff1f;打包模式区别&#xff1f; 根据官网文档介绍&#xff0c;建议使用 ETC2&#xff1a;所有OpenGL 3.x 类型的设备都支持&#xff0c;并且支持alpha压缩 打包模式包括&#xff1a;内部测试阶段的开发模式&#xff0c;对外发布的发行…

Python爬虫淘宝商品代码指南

更新&#xff1a;2023-06-13 15:03 本篇文章将为您详细介绍使用Python爬取淘宝商品信息的代码步骤及方法 一、爬虫基础知识 在开始淘宝商品信息爬取之前&#xff0c;我们需要了解一些基础知识&#xff1a; 1、Python基础语法知识&#xff1a;包括基本数据类型、字符串、列…

idea2023 springboot2.7.5+mybatisplus3.5.2+jsp 初学单表增删改查

创建项目 修改pom.xml 为2.7.5 引入mybatisplus 2.1 修改pom.xml <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mysq…

TypeError: a bytes-like object is required, not ‘str‘

raceback (most recent call last): File "D:\pycharmcode\client.py", line 12, in <module> tcp_socket.send(send_data) TypeError: a bytes-like object is required, not str 使用socket进行ubuntu与windows通信时&#xff0c;发送数据时报了以上错…

第五章,向量空间,3-内积、长度、夹角和距离

第五章&#xff0c;向量空间&#xff0c;3-内积、长度、夹角和距离 内积定义内积的运算性质内积空间 长度性质单位向量及单位化 夹角距离 玩转线性代数(28)长度、夹角和距离的笔记&#xff0c;相关证明以及例子见原文 内积 定义 设有n维向量 x ( x 1 x 2 ⋮ x n ) , y ( y…

【C++】C++入门基础:引用详解

本篇继续分享关于C入门的相关知识&#xff0c;有关命名空间、缺省参数和函数重载的部分欢迎阅读我的上一篇文章【C】C入门基础详解&#xff08;1&#xff09;_王笃笃的博客-CSDN博客 继续我们的学习 引用 在C语言中我们接触过指针&#xff0c;很多人都或多或少为他感到头痛过…