GaussDB 主备版本8 -数据库对象 学习

devtools/2024/10/22 4:26:24/

在这里插入图片描述

1 表空间

1.1 GaussDB自带了两个表空间:pg_default和pg_global
1.1.1 默认表空间pg_default:用来存储非共享系统表、用户表、用户表index、临时表、临时表index、内部临时表的默认表空间。对应存储目录为实例数据目录下的base目录。
1.1.2 共享表空间pg_global:用来存放共享系统表的表空间。对应存储目录为实例数据目录下的global目录。
1.2 华为建议使用默认表空间,性能更好?
1.3 SET default_tablespace = ‘fastspace’;
1.4 SELECT spcname FROM pg_tablespace;

2 系统表

2.1 兼容PG的系统表和系统视图
2.1.1 这类系统表和系统视图具有PG前缀。
2.2 GaussDB新增的系统表和系统视图
2.2.1 这类系统表和系统视图具有GS前缀。
2.3 兼容O数据库的系统表和系统视图
2.3.1 这类系统表和系统视图具有ALL、DBA、USER或PV前缀。
2.4 参考文档
2.4.1 https://support.huaweicloud.com/intl/zh-cn/centralized-devg-v8-gaussdb/gaussdb-42-0864.html

3 索引

3.1 唯一索引
3.1.1 CREATE UNIQUE INDEX
3.2 多字段索引
3.3 部分索引
3.3.1 建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。
3.3.2 CREATE INDEX part_index ON tpcds.customer_address_bak(ca_address_sk) WHERE ca_address_sk = 5050;
3.3.3 这个模式oracle不支持,类似部分分区索引
3.4 表达式索引
3.4.1 索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。
3.4.2 CREATE INDEX para_index ON tpcds.customer_address_bak (trunc(ca_street_number));
3.5 分区索引
3.5.1 LOCAL
指定创建的分区索引为LOCAL索引。
CREATE INDEX idx_student1 ON student(id) LOCAL;
3.5.2 GLOBAL
指定创建的分区索引为GLOBAL索引,当不指定LOCAL、GLOBAL关键字时,默认创建GLOBAL索引。
CREATE INDEX idx_student2 ON student(name) GLOBAL;
3.5.3 可以在部分分区创建特定索引
CREATE INDEX idx_student3 ON student(lower(name)) LOCAL;
CREATE INDEX idx_student4 ON student(lower(name)) GLOBAL;
3.6 INCLUDE
3.6.1 可选的 INCLUDE 子句指定将一些非键列(non-key columns)包含在索引中。非键列不能用于作为索引扫描的加速搜索条件,同时在检查索引的唯一性约束时会忽略非键列。
3.6.2 可以加速查询?
3.7 WHERE predicate
3.7.1 部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分
3.7.2 例如,有一个表,表里包含已记账和未记账的订单,未记账的订单只占表的一小部分而且这部分是最常用的部分
3.8 REINDEX
3.8.1 REINDEX CONCURRENTLY在线重建索引导致表上索引顺序改变时,可能会导致查询计划改变
3.8.2 在线重建索引只支持B-tree索引和UB-tree索引,只支持普通索引、GLOBAL索引、LOCAL索引,不支持PCR ubtree索引,不支持二级分区与GSI
3.9 并行创建索引
3.9.1 ALTER TABLE table_name SET (parallel_workers=4);
3.9.2 REATE INDEX index_name ON table_name(col1);
3.9.3 ALTER TABLE table_name RESET (parallel_workers);

4 视图

4.1 管理视图

5 序列

5.1 DB_SEQUENCES视图显示当前用户能够访问的所有序列的信息。该视图同时存在于PG_CATALOG和SYS Schema下。

6 定时任务

6.1 并发控制
6.1.1 当job_queue_processes为0时,表示不启用定时任务功能,任何job都不会被执行。
6.1.2 当job_queue_processes大于0时,表示启用定时任务功能,该值为系统能够并发处理的最大任务数。

7 database

7.1 一个数据库实例内,用户自定义的Database数量推荐值为3个,不建议超过10个
7.2 建议创建Database的时候使用UTF-8编码
7.3 Database的owner默认拥有该Database下所有对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用

8 schema

8.1 实际用户环境中Schema数量不建议超过100个。当数据库中存在大量Schema时,会导致gs_dump等依赖Schema数量的操作性能变慢
8.2 Schema的owner默认拥有该Schema下对象的所有权限,包括删除权限。删除权限影响较大,请谨慎使用。

9 表

9.1 字段
9.1.1 选择数值类型时,在满足业务精度的情况下,选择数据类型的优先级从高到低依次为整数、浮点数、NUMERIC。
9.1.2 除非明确知道数据类型为固定长度字符串,否则,不建议使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。
9.1.3 在需要数据类型转换(不同数据类型进行比较或转换)时,使用强制类型转换,以防隐式类型转换结果与预期不符
9.1.4 字段递增列
GaussDB数据库支持创建自动递增列,您可以在创建表时,指定SERIAL数据类型。
CREATE TABLE table_name(id serial, name varchar(20));
使用序列
–创建序列。
gaussdb=# CREATE SEQUENCE tbl_person_id_seq;
–创建表tbl_persion,其中id字段依据序列tbl_person_id_seq实现自增。
gaussdb=# CREATE TABLE tbl_persion(
id int NOT NULL DEFAULT nextval(‘tbl_person_id_seq’::regclass),
name varchar(20));

9.1.5 默认为当前时间的列
CREATE TABLE tbl (id int, modtime date DEFAULT CURRENT_TIMESTAMP);
9.2 约束
9.2.1 唯一约束
从命名上明确标识唯一约束,例如,命名为“UNI+字段名”。
9.2.2 主键约束
从命名上明确标识主键约束,例如,将主键约束命名为“PK+字段名”。
9.2.3 检查约束
从命名上明确标识检查约束,例如,将检查约束命名为“CK+字段名”。
9.3 索引
9.3.1 索引字段的总长度不超过50字节。否则,索引大小会膨胀比较严重,带来较大的存储开销,同时索引性能也会下降
9.4 查询分区表分区信息和索引信息
9.4.1 使用pg_get_tabledef()函数查看表的定义,返回信息包含建表SQL、注释、索引、约束等。
9.4.2 分区信息可以查询视图pg_partition,索引信息可以查询视图pg_indexes。
9.4.3 还有pg_tables
9.5 分区表
9.5.1 分区方案
Range
表数据通过范围进行分区。
Interval
表数据通过范围进行分区,超出范围的会自动根据间隔创建新的分区。
List
表数据通过指定列按照具体值进行分区。
Hash
表数据通过Hash散列方式进行分区。

9.5.2 分区表运维管理
包括新增(Add)、删除(Drop)、交换(Exchange)、清空(Truncate)、分割(Split)、合并(Merge)、移动(Move)、重命名(Rename)

  • 使用移动分区的命令来将一个分区移动到新的表空间中
  • 可以使用ALTER TABLE ENABLE/DISABLE ROW MOVEMENT来开启/关闭分区表行迁移

交换分区,进行交换的普通表和分区必须满足如下条件:

  • 普通表和分区的列数目相同,对应列的信息严格一致。
  • 普通表和分区的表压缩信息严格一致。
  • 普通表索引和分区Local索引个数相同,且对应索引的信息严格一致。
  • 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。
  • 普通表不可以是临时表。
  • 普通表和分区表上不可以有动态数据脱敏,行访问控制约束。

注意事项

  • 执行交换分区命令会使得Global索引失效,可以通过UPDATE GLOBAL INDEX子句来同步更新Global索引,或者用户自行重建Global索引。
  • 执行交换分区时,可以申明WITH/WITHOUT VALIDATION,表明是否校验普通表数据满足目标分区的分区键约束规则(默认校验)。
  • 数据校验活动开销较大,如果能确保交换的数据属于目标分区, 可以申明WITHOUT VALIDATION来提高交换性能。
  • 可以申明WITH VALIDATION VERBOSE,此时数据库会校验普通表的每一行,将不满足目标分区的分区键约束规则的数据,插入到分区表的其他分区中,最后再进行普通表与目标分区的交换。

10 JDBC配置

10.1 JDBC向GaussDB发起连接请求,会默认添加以下配置参数
10.1.1 params = {
{ “user”, user },
{ “database”, database },
{ “client_encoding”, “UTF8” },
{ “DateStyle”, “ISO” },
{ “extra_float_digits”, “3” },
{ “TimeZone”, createPostgresTimeZone() },
};

10.2 对于精度敏感的场景,建议使用numeric类型
10.3 通过JDBC连接数据库时,应该保证以下三个时区设置一致:

  • JDBC客户端所在主机的时区。
  • GaussDB数据库实例所在主机的时区。
  • GaussDB数据库实例配置过程中时区。

11 RESOURCE POOL

CREATE RESOURCE POOL用于创建一个资源池,并指定此资源池相关联的控制组。

  •  只有SYSADMIN或初始用户才能执行此操作。
    

12 对象名称的长度是否有限制

12.1 在创建数据库对象时命名长度不可超过63个字节


http://www.ppmy.cn/devtools/125771.html

相关文章

OpenCV视频I/O(20)视频写入类VideoWriter之用于将图像帧写入视频文件函数write()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::VideoWriter::write() 函数用于将图像帧写入视频文件。 该函数/方法将指定的图像写入视频文件。图像的大小必须与打开视频编写器时指定的大…

小牛问题(c++)

题目描述 一头刚出生的小母牛,4年后生一头小母牛,即第4年会生一头小母牛,以后每年生一头,现有一头刚出生的小母牛,问n年后共有多少头牛? 输入 输入n 输出 输出共有多少头牛 样例输入 复制 10 样例输…

OpenAI Canvas最新发布,编程和写作迎来全新史诗级加强!

文章目录 零、前言一、GPT-40 with canvas操作指导写作领域加强建议编辑调整长度阅读水平添加最后的润色添加表情 编程领域加强选中代码问问题添加评论(添加注释)添加日志转换语言代码审查 二、感受 零、前言 最新消息,国庆期间OpenAI有大动…

docker详解介绍+基础操作 (四)容器镜像

一.镜像结构和原理 Docker 镜像是 Docker 技术的核心组成部分之一,它用于封装应用程序及其依赖项,以便在任何支持 Docker 的环境中运行。了解 Docker 镜像的结构和原理对于有效使用 Docker 至关重要。以下是对 Docker 镜像结构和原理的详细介绍。 Dock…

使用 Raspberry Pi Pico W 的基于 MQTT 的分布式网络自适应估计

英文论文标题:MQTT based Adaptive Estimation over Distributed Network using Raspberry Pi Pico W 中文论文标题:使用 Raspberry Pi Pico W 的基于 MQTT 的分布式网络自适应估计 作者信息: Prantaneel DebnathAnshul GusainParth Sharm…

若依前后端框架学习——新建模块(图文详解)

若依框架—新建模块 一、项目地址1、后端启动2、前端启动 二、生成代码1、添加菜单2、创建表结构3、生成代码2、编辑一些基本信息,然后点击提交3、生成代码,压缩包里有前端和后端代码 三、配置后端模块1、新建模块2. 修改pom.xlm2.1 修改第一个pom.xml 2…

Yolov11与Yolov8在西红柿识别数据集上对比

Ultralytics 最新发布的 YOLOv11 相较于其上一代产品 YOLOv8,虽然没有发生革命性的变化,但仍有一些显著的改进(值得注意的是,YOLOv9 和 YOLOv10 并非由 Ultralytics 开发)。其中,最引人注目的变化包括&…

三、账号密码存储

使用Playfers存储 Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园 (cnblogs.com) 一、登陆界面切换 1、登陆界面的脚本(机制类脚本) 在这个UI上挂载一个脚本LoginWnd 先声明一下这个脚本,拖拽 2、在登录模块中调用 这里的l…