数据库分区;pgAdmin操作pgsql分区;修改pgsql数据库名字

news/2024/7/9 20:45:39 标签: 数据库, postgresql

目录

分区

什么是分区

分区的优势

pgAdmin操作pgsql分区

创建父表

 创建分区

 数据入库分区

扩展(按天创建分区脚本)

修改数据库名字

 链接


分区

什么是分区

指将一个大的表或索引分成多个小的、独立的部分,每个部分称为一个分区,以便更好地管理和处理数据。分区是逻辑上的,不同的分区可以物理上存储在不同的磁盘上,也可以存储在同一个磁盘的不同位置。数据库分区可以通过数据库管理系统自动完成,无需手动分割数据表或索引。

举个例子:我一个大数据量的表,每天几千万的数据,为了方便管理、统计和查询,我可以按天建立分区并且把数据落入对应时间的分区,下边创建分区案例中会有具体实现。

总的来说是根据分区策略,将数据数据分散到不同的子表中,并通过父表建立关联关系,从而实现数据物理上的分区。

分区的优势

数据库分区是一种高效管理海量数据的技术手段,它可以提升数据库的性能、可用性和可维护性,极大地方便了数据库的开发和维护工作。

分区表之后可以将不同的表放置在不同的物理空间上,从而达到冷数据放在廉价的物理机器上,热点数据放置在性能强劲的机器上。

性能上通过分区表的父表查数据相对于普通的数据全量表查询效率要低。直接分区表中查询数据比在全量表中查询数据效率要高。

相比于单个创建表而不分区,我觉得分区聚合统计会比较方便一点。

pgAdmin操作pgsql分区

创建父表

找到create table

 输入名字、开启分区(会提示你指定分区表key,先不管)

 写表属性,必须包含一个分区逻辑字段,我这里以时间分区(date),(注意不能出现主键索引,否者会报错)

 找到partitions,可以看到有三种partition type这里我是用list

  • 范围(Range )分区: 表被划分为由键列或列集定义的“范围”,分配给不同分区的值的范围之间没有重叠。 例如:可以按日期范围或特定业务对象的标识符范围,来进行分区。
  • 列表(List)分区: 通过显式列出哪些键值出现在每个分区中来对表进行分区。
  • 哈希(Hash)分区: (自PG11才提供HASH策略)通过为每个分区指定模数和余数来对表进行分区。 每个分区将保存行,分区键的哈希值除以指定的模数将产生指定的余数。

keyType类型有两种:列和表达式,我选择列

collation排序规则(用于指定表格列中的字符串数据排序方式)我没选

operator class操作符类我没选

下边的partitions框就是创建具体分区的,我们先不创建,先创建父表

 可以预览一下sql,毕竟不能只会用pgadmin可视化操作,保存结束

 创建分区

找到刚才创建的父表,打开属性,找到分区(partitions),因为我们使用的list的类型,所以指定in字段即可

 保存后就可以看到已经出现了分区

 数据入库分区

很简单的案例

插入的时候一定要指定你的分区列,比如我上边创建分区是in=230512,那么我想插入或查询这个分区的时候一定要携带分区列=230512的条件,剩下的交给数据库给你逻辑插入或者查询。

扩展(按天创建分区脚本)

其实在我们创建分区的时候点击最右边的sql栏位,就已经给出我们sql了

然后再结合pgagent写定时任务,方法如下

declare 
    currentDate varchar;
  
BEGIN
  SELECT INTO currentDate to_char(current_date+interval '1 d', 'yymmdd');
  execute 'CREATE TABLE public.message'||currentDate||' PARTITION OF public.message FOR VALUES IN ('||currentDate||')';
  return currentDate;
END;

不会pgagent的可以在我文章中搜索查看

修改数据库名字

在都完成之后,leader突然说我数据库名字起的不是很好,我直接右击修改数据库名字然后得到一个报错

 这是为什么,明明给出了修改的选项,却不让修改,这不是欺负老实人吗。

其实想想很简单,如果这个数据库被别人用着,有连接存在,你改了别人怎么办。

所以我们直接用命令行进入pgsql,找到数据库中的活动连接的pid

SELECT
  pid,
  usename,
  application_name
FROM
  pg_stat_activity
WHERE
  datname = 'name';

紧接着,我们直接把他们的连接T掉(正式环境可不敢这么玩,谨慎使用),把pid全部踢掉

 SELECT pg_terminate_backend(pid);

 最后执行修改数据库名的语句

ALTER DATABASE test_db RENAME TO test_new_db;

 链接

PostgreSQL 教程 (sjkjc.com)


http://www.niftyadmin.cn/n/316454.html

相关文章

消息队列中间件介绍

消息队列介绍 消息队列中间件是大型系统中的重要组件,已经逐渐成为企业系统内部通信的核心手段。它具有松耦合、异步消息、流量削峰、可靠投递、广播、流量控制、最终一致性等一系列功能,已经成为异步RPC的主要手段之一。 目前常见的消息中间件有Active…

class其实是function的语法糖,底层继承实现还是基于原型链

定义在原型上的方法与定义在构造函数内部的方法不同 function Person(name, age) {this.name name;this.age age;}Person.prototype.greet function() {console.log("Hello, my name is " this.name);};const person new Person("Alice", 25);functio…

linux如何查询某个关键字所处在哪个文件夹的哪个文件下

问题:: linux如何查询某个关键字所处在哪个文件夹的哪个文件下 或者 linux如何查询文件夹中的某个文件中的关键字 前提: 你要知道关键字是什么 原理: 在 Linux 中,可以使用 grep 命令来查询文件夹中的某个文件中的关键字。 grep 命令的…

Linux命令易混淆(看到新知识点就更新)

DNS相关 在Linux操作系统中,TCP/IP网络是通过若干个文本文件进行配置的。系统在启动时通过读取一组有关网络配置的文件和脚本参数内容,来实现网络接口的初始化和控制过程,这些文件和脚本大多数位于/etc目录下。 Linux下配置dns的三种方法 1…

Lucene(2):Lucene全文检索的流程

1 索引和搜索流程图 (1)绿色表示索引过程,对要搜索的原始内容进行索引构建一个索引库,索引过程包括: 确定原始内容即要搜索的内容 获得文档创建文档分析文档索引文档 (2)红色表示搜索过程&…

2023.05.11 c高级 day3

编写一个名为myfirstshell.sh的脚本,它包括以下内容。 包含一段注释,列出您的姓名、脚本的名称和编写这个脚本的目的和当前用户说“hello 用户名”显示您的机器名 hostname显示上一级目录中的所有文件的列表显示变量PATH和HOME的值显示磁盘使用情况用id命…

Bean的生命周期及演示

文章目录 一、介绍概念组成: 二、实例演示 一、介绍 概念 Bean的生命周期是指一个Bean对象从创建到销毁的整个存在过程。 组成: 1.实例化Bean(为Bean分配内存空间) 2.属性注入 (Bean注入和装配) 3.Bean的初始化 各种通知&#…

【Vue】组件

文章目录 一、组件定义1.模块化2.组件化 二、全局组件定义1.Vue.extend() Vue.component()2.Vue.component()3.Vue.component()4.Vue.component() 三、私有组件定义 一、组件定义 拆分Vue实例的代码量,以不同的组件,来划分不同的功能模块。 1.模块化 模…