首页 > 数据库 >PostgreSQL之继承

PostgreSQL之继承

时间:2024-08-20 10:17:57浏览次数:12  
标签:01 PostgreSQL parent 继承 child table TABLE

继承表

PostgreSQL支持表继承,这是一种将多个表组织成一个继承层次结构的方式。在表继承中,一个父表可以定义一组共享的列和约束,并可以有多个子表继承这些定义,并可以添加自己的额外列和约束。

下面是关于如何使用PostgreSQL继承表的一些重要概念和用法:

CREATE TABLE employees (
employee_id SERIAL PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100)
);

1、定义子表并继承父表

写法1:INHERITS (父表名);
特点:继承了字段和检查约束和非空约束,不包括唯一性、主键和外键约束,但不继承父表索引

CREATE TABLE managers (manager_id INT) INHERITS (employees);

 

写法2:(like 父表名 including all)INHERITS (父表名);

特点:继承了字段和检查约束和非空约束,不包括唯一性、主键和外键约束,也继承了父表索引

CREATE TABLE engineer(like employees including all)INHERITS (employees);

2、查看表之间的继承关系

pg_inherits记录有关表和索引继承层次结构的信息。数据库中的每个直接父子表或索引关系都有一个条目。(间接继承可以通过下列条目链来确定。)

SELECT inhrelid::regclass AS child_table,
inhparent::regclass AS parent_table
FROM pg_inherits;

3、修改继承关系

添加继承关系:

ALTER TABLE parent_table INHERIT child_table1, child_table2, ...;

删除继承关系: 删除了继承关系以后子表从父表继承的字段还在,只是以后没关系了

ALTER TABLE parent_table NO INHERIT child_table1, child_table2, ...;

2. 使用继承特性实现本地分区

-- 创建父表
CREATE TABLE parent_table (
id SERIAL PRIMARY KEY,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
) PARTITION BY RANGE (created_at);

-- 创建子表,作为分区
CREATE TABLE child_table_2021
PARTITION OF parent_table
FOR VALUES FROM ('2021-01-01') TO ('2022-01-01');

CREATE TABLE child_table_2022
PARTITION OF parent_table
FOR VALUES FROM ('2022-01-01') TO ('2023-01-01');

-- 插入数据时,PostgreSQL会根据分区键(created_at)自动将数据插入到正确的子表中
INSERT INTO parent_table (id) VALUES (1); -- 会被插入到child_table_2021
INSERT INTO parent_table (id, created_at) VALUES (2, '2022-02-01'); -- 会被插入到child_table_2022

 
在这个例子中,父表parent_table定义了一个范围分区键created_at。两个子表child_table_2021child_table_2022继承了父表的结构,并且为每个子表指定了数据存储的时间范围。
当插入数据到parent_table时,如果created_at值在相应的范围内,PostgreSQL会自动将数据存储到正确的子表中。 

 

标签:01,PostgreSQL,parent,继承,child,table,TABLE
From: https://www.cnblogs.com/dll102/p/18368901

相关文章

  • postgresql 定时收集表和索引统计信息 转发:https://blog.csdn.net/weixin_33711641/a
    --由于pg中表和索引的信息收集都是基于时间点的,对于以往的信息无法与现在的信息进行对比,故写下此工具进行统计信息收集--创建数据信息的schemacreateschemadb_stat;--创建收集信息的基础表createtabledb_stat.snapshot_pg_stat_all_indexes(relidint,indexrelidint,scheman......
  • PostgreSQL数据库的安装与部署(Linux)
    CentOS安装PostgreSQL版本信息:   CentOS版本:CentOS-7-x86_64-Minimal-1810   PostgreSQL版本:PostgreSQL10.10,64-bit 第一部分:PostgresSQL的安装1、安装rpm文件yuminstallhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redh......
  • 继承的优缺点
    8.2继承的优缺点8.2.1继承的好处​ ①:提高了代码的复用性​ ②:提高了代码的维护性​ ③:让类与类之间产生了关系,是多态的前提8.2.2继承的缺点有以下几点:①:父类的内部细节对子类是可见的,破坏了父类的封装性。②:子类从父类继承的方法在编译时就确定下来了,所以无法......
  • python基础语法 010 类和对象-6-1 继承定义
    前提:    在真实世界中,类型之间可能存在范围包含关系,比如:人这个类型和亚洲人这个类型。        人是包括了亚洲人的,如果某人是员工亚洲人,那么它必定是一个人        这种关系,在编程语言中称为继承关系        比如上面例子:亚洲人这个类就继......
  • 何为继承
    8.1何为继承目录8.1何为继承8.1.1继承的概念8.1.2生活中的继承:8.1.3类的继承格式8.1.4类的继承格式8.1.1继承的概念继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子......
  • 240815-PostgreSQL自带逻辑复制简单使用
    PostgreSQL自带逻辑复制简单使用一、逻辑复制说明角色IP端口数据库名用户名版本发布端192.168.198.1658432pubdbrepuserPostgreSQL13.13订阅端192.168.198.1628432subdbrepuserPostgreSQL13.13二、搭建逻辑复制环境2.1发布端配置发布端post......
  • 数据库技术核心:查询优化(PostgreSQL)
    文章目录案例1:使用合适的索引优化查询案例2:优化多表复杂联接查询案例3:优化多条件查询案例4:消除低效的联接查询案例5:包含多个联接和聚合的复杂查询案例6:消除低效的子查询案例7:复杂窗口函数和CTE(公用表表达式)案例8:适当的表结构设计与分区表优化案例9:使用物化视图......
  • 值类型和引用类型、装箱和拆箱、静态类和普通类、方法的重载、继承和多态、访问修饰符
    目录一、值类型和引用类型的区别?值类型(ValueTypes)定义:特点:示例:引用类型(ReferenceTypes)定义:特点:示例:举例说明:总结:二、装箱和拆箱装箱(Boxing)特点:示例:拆箱(Unboxing)特点:示例:示例代码:装箱和拆箱的影响最佳实践:三、静态类和普通类的区别?静态类(Static......
  • java:关于多态,继承,接口的好处。
    目录比喻1. 交通工具(Driver)2. 汽车(Car)和自行车(Bicycle)代码示例:思考:为什么不直接CarV=newCar();?1. 多态性2. 代码的灵活性3. 易于扩展4. 减少耦合总结比喻想象一下,你有一个 “交通工具” 的抽象概念(可以是一个接口或类),然后你有不同的具体交通工具,比如......
  • 六、熟知java(类和对象--引用和继承)
    熟知java(类和对象–引用和继承)一、什么是JAVA中的引用?引用的概念,如果一个变量的类型是类类型,而非基本类型,那么该变量又叫做引用。二、引用和指向newRole();代表创建了一个Role对象,但是只是创建,并不能访问它,为了访问它,我们会使用引用来代表这个对象:Roler=newRol......