【数据库】Postgresql、PG的分区操作:创建、删除指定分区,非分区表转分区表
〇、参考链接
一、为表创建指定分区
-- 表创建分区 参数 表名 分区序列 例如: ltc_customer , 20220915 则创建 ltc_customer_20220915 分区表
CREATE or replace FUNCTION createPartitionIfNotExists (tb_name VARCHAR, partiton_val VARCHAR) RETURNS void AS $body$
DECLARE master_name TEXT := tb_name; -- 创建分区表的表名
DECLARE partition_name TEXT := tb_name || '_' || partiton_val; -- 分区的表名称
BEGIN
-- 判断分区名称是否存在,不存在时才需要创建
IF to_regclass (partition_name) IS NULL THEN
-- 执行创建分区
EXECUTE format (
'create table %I partition of %I for values in (%s)',
partition_name,
master_name,
partiton_val
);
END IF;
END;
$body$ LANGUAGE plpgsql;
二、删除指定的表分区
-- 删除表分区 例如: ltc_customer_20220915
CREATE or replace FUNCTION deletePartitionIfExists (tb_name_partiton_val VARCHAR) RETURNS void AS $body$
DECLARE master_name TEXT := tb_name_partiton_val; -- 删除分区表 表名
BEGIN
-- 判断分区名称是否存在,不存在时才需要创建
IF to_regclass (tb_name_partiton_val) is not null THEN
-- 执行创建分区
EXECUTE format ('DROP TABLE IF EXISTS %s ',tb_name_partiton_val);
END IF;
END;
$body$ LANGUAGE plpgsql;
三、将原有的非分区表转换为分区表
-- 将原有的非分区表转化为分区表
CREATE OR REPLACE FUNCTION "table_migration"("tb_name" varchar, "partition_column" varchar)
RETURNS "pg_catalog"."void" AS $BODY$ DECLARE
DECLARE
old_name TEXT := tb_name || '_old';
declare d varchar;
declare days varchar[] := array(select to_char(date(t),'yyyymmdd')::varchar as day
from
generate_series('2022-08-01'::date,'2022-11-01', '1 days') as t );
BEGIN
IF
to_regclass ( tb_name ) IS NOT NULL THEN
-- 1. 表重命名
EXECUTE format ( 'ALTER TABLE %s RENAME TO %s', tb_name, old_name );
-- 2. 创建分区表
EXECUTE format ( 'CREATE TABLE %s ( LIKE %s INCLUDING ALL ) PARTITION BY list ( %s )', tb_name, old_name, partition_column );
-- 3. 创建2022年一年的分区
foreach d in array days loop
EXECUTE format ( 'create table %s partition of %s for values in (%s)', tb_name || '_' || d, tb_name, d );
end loop;
-- 4. 执行数据迁移
EXECUTE format ( 'insert into %s select * from %s', tb_name, old_name );
-- 5. 删除原来的表,可以先不做
-- EXECUTE format ( 'drop table %s', old_name );
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
【数据库】Postgresql、PG的分区操作:创建、删除指定分区,非分区表转分区表的更多相关文章
- 当在本地磁盘服务(Windows)中无法删除指定分区时的解决方案
有时候,我们在使用Windows管理磁盘分区时,可能会出现部分分区无法删除的情况,也就是说右键快捷菜单中没有删除卷的操作项. 此时,我们可以按照如下的步骤进行操作即可完成: Step 1: 以管理员身 ...
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
说明: 我这里要把MySQL数据库存放目录/var/lib/mysql下面的pw85数据库备份到/home/mysql_data里面,并且保存为mysqldata_bak_2011_11_03.tar ...
- mysql 复习与学习(二)数据库及表结构的创建删除
mysql -h localhost -uroot -p123456 //连接数据库 show databases; //查看数据库 create database if not exists db_ ...
- 数据库的SQL基本用法 创建 删除 查询 修改
1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname 3.说明:备份sql server--- 创建 备份数据的 ...
- truncate删除一个分区,测试全局索引是否失效
目的,有一个清理数据的需求,需要删除历史的一个分区所有记录信息,但是存在主键global索引,如何更好的维护. 如下测试流程一 提前创建好一个已时间created 字段作为分区键的范围分区表 SQL& ...
- Oracle 删除用户和表空间////Oracle创建删除用户、角色、表空间、导入导出、...命令总结/////Oracle数据库创建表空间及为用户指定表空间
Oracle 使用时间长了, 新增了许多user 和tablespace. 需要清理一下 对于单个user和tablespace 来说, 可以使用如下命令来完成. 步骤一: 删除user drop ...
- Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
说明: Oracle数据库服务器操作系统:CentOSIP:192.168.0.198端口:1521SID:orclOracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务 ...
- MongoDB 数据库创建删除、表创建删除、数据增删改查
一.管理 mongodb 数据库:mongo 查看所有数据库列 表 show dbs 二. 创建数据库 创建 数据库 use student 如果真的想把这个数据库创建成功,(collections) ...
- 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】
MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...
- Linux下定时切割Mongodb数据库日志并删除指定天数前的日志记录
此为在网络上找来的,觉得很好! 实现目的: 对Mongodb数据库日志按天保存,并且只保留最近7天的日志记录. 具体操作: 使用Mongodb数据库自带的命令来切割日志 ps -def | grep ...
随机推荐
- docker垃圾处理
1 查找docker文件夹 find / -name docker 2 列举文件夹大小 du -h --time --max-depth=1 . df -h df -TH 3 Docker占用磁盘空间 ...
- 10.使用nexus3配置golang私有仓库
1,前言说明 golang是近来非常火热的语言,但是处理其依赖包一直都是一个让人头疼的问题,尤其是在国内,开发者需要下载一些官方的包的时候,就会非常苦恼.尽管已经有了私服 Athens,公司也已经搭建 ...
- Compass- 图形化界面客户端
到MongoDB官网下载MongoDB Compass, 地址: https://www.mongodb.com/download-center/v2/compass?initial=true 如果是 ...
- js内置禁用按钮 disabled
按钮在监听到disabled后面的布尔值就可以实现是否禁用 一: <button :disabled="book.count <= 1" @click="de ...
- Opengl ES之纹理贴图
纹理可以理解为一个二维数组,它可以存储大量的数据,这些数据可以发送到着色器上.一般情况下我们所说的纹理是表示一副2D图,此时纹理存储的数据就是这个图的像素数据. 所谓的纹理贴图,就是使用Opengl将 ...
- 图片 css剪切,等比例缩放
object-fit: cover; .img1 {//自定义图片宽高,并且等比例缩放 width: 200px; height: 400px; object-fit: cover; }
- PHP全栈开发(八):CSS Ⅶ 表格 style
表格默认是没有边框的,因此,我们在设置表格格式的时候,首先要设置的是表格边框的样式,也就是 table{ border-style:solid; } 设置完表格表格的样式之后,可以设置表格边框的粗细程 ...
- 备份 MySQL 的 shell 脚本(mysqldump版本) shell脚本
#!/bin/bash # 备份 MySQL 的 shell 脚本(mysqldump版本) # 定义变量 user(数据库用户名),passwd(数据库密码),date(备份的时间标签) # dbn ...
- Failed to convert from type [java.lang.String] to type [java.util.Date] for value '2020-02-06'; nested exception is java.lang.IllegalArgumentException]解决
今天做springbook项目前端输入日期传到数据库保存报了一下错误 Whitelabel Error Page This application has no explicit mapping fo ...
- Annocation(注解)的使用示例
示例一:生成文档相关的注解示例二:在编译时进行格式检查(JDK内置的三个基本注解)@Override: 限定重写父类方法, 该注解只能用于方法@Deprecated: 用于表示所修饰的元素(类, 方法 ...