pgsql_postgresql表的继承关系查询

pgsql_postgresql表的继承关系查询

  • pgsql_postgresql表的继承关系查询
    • 前言
    • 向上反查表的继承关系SQL
    • 系统表说明
      • pg_class
      • pg_namespace
      • pg_inherits
      • pgsql with 语法

pgsql_postgresql表的继承关系查询

前言

表继承是pgsql的一个特性,通过表继承可以方便的实现表数据的横向拆分(表分区),从而实现对数据做物理隔离等操作。
继承有别于表分区,继承可以很多层级。

比如存储省、市、区的数据时,即要物理隔离每层数据又要按层级统一查询,此时做个带有继承关系的表是很好的实现方式。
实现方法是,建立三个shcema为 province、city、region,每个schema中建立一个表 persion ,并实现继承关系如下:
province.persion <- city.persion <- region.persion。

管理继承关系是个麻烦事,如果库中有1000张表,有部分表没有实现三级继承关系,如何排查?

下面的脚本是一个向上反查父级的SQL,通过叶子表向上反查三层,既可以得到所有表的继承关系,每行是一个表的继承信息。

向上反查表的继承关系SQL

with tab as (--表名+schema名select a.oid,a.relname,b.nspname,concat(nspname,'.',relname) as tab_full_name from pg_class a,pg_namespace b where a.relnamespace=b.oid
)
--继承关系详情
select(select tab_full_name from tab where oid=t.l3_oid limit 1) l3,(select tab_full_name from tab where oid=t.l2_oid limit 1) l2,(select tab_full_name from tab where oid=t.l1_oid limit 1) l1
from
(--以叶子表反查继承关系select pgt.oid tab_oid,pgt.relname,pgn.nspname,level3.inhrelid as l3_oid,level2.inhrelid as l2_oid,level1.inhrelid as l1_oidfrom pg_class pgt-- 限定schema的普通表(叶子级schema)join pg_namespace pgn on pgt.relnamespace = pgn.oid and pgt.relkind = 'r' and pgn.nspname = 'my_schema_name'-- 查是否存在继承left join pg_inherits level3 on pgt.oid = level3.inhrelid-- 查父级left join pg_inherits level2 on level3.inhparent = level2.inhrelid-- 查父级的父级left join pg_inherits level1 on level2.inhparent = level1.inhparent
) t;

系统表说明

pg_class

pgsql也是面向对象的,看pg_class就知道,该表内记录了pgsql中的所有对象(表、视图、主键…),其中查询普通表对象的脚本是:

select * from pg_class where relkind='r';

pg_namespace

表的命名空间信息,即表的schema名字。

--查询表命名空间
select a.oid,a.relname,b.nspname,concat(b.nspname,'.',a.relname) fullname 
from pg_class a,pg_namespace b
where a.relnamespace=b.oid and b.nspname='assy_def_crp' and relkind='r' ;

pg_inherits

表的继承关系,比较简单只记录了父表ID。

select * from pg_inherits;

pgsql with 语法

WITH提供了一种编写辅助语句的方法,以便在较大的查询中使用。这些语句通常被称为公共表表达式或CTE,可以认为它们定义了仅为一个查询而存在的临时表。WITH子句中的每个辅助语句可以是SELECT、INSERT、UPDATE或DELETE;WITH子句本身附加到主语句,主语句也可以是SELECT、INSERT、UPDATE或DELETE。
这里我们只用到了Select查询。

with tab as (--表名+schema名select a.oid,a.relname,b.nspname,concat(nspname,'.',relname) as tab_full_name from pg_class a,pg_namespace b where a.relnamespace=b.oid
)

可以声明多个临时表,之间用逗号分割:

withq1 as (select 1),q2 as (select 2),q3 as (select 3)
select * from q1
union all
select * from q2
union all
select * from q3;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/225191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用OpenCV和PIL库读取图片的区别

OpenCV 和 PIL&#xff08;Pillow&#xff09;是两个不同的图像处理库&#xff0c;它们使用不同的数据结构来表示图像。 OpenCV 格式图像&#xff1a; OpenCV 中的图像通常表示为 NumPy 数组。这些数组可以是多维的&#xff0c;例如对于彩色图像&#xff0c;它们是三维数组&am…

Golang学习之路一开山篇

Golang学习之路一开山篇 初识 Golang 我第一次接触 Golang 是在2016年, 当时在深圳工作, 项目需要用Golang, 当时在犹豫要不要学还是走, 毕竟Java开发搞了很多年了, 说放弃还是有难度的, 其实也不是放弃Java, 说不定其他项目还是要使用Java. 在领导的再三劝说下, 开启了Golan…

嵌入式开发人员需要具备哪些能力?

大家好&#xff0c;今天给大家介绍嵌入式开发人员需要具备哪些能力&#xff0c;文章末尾附有分享大家一个资料包&#xff0c;差不多150多G。里面学习内容、面经、项目都比较新也比较全&#xff01;可进群免费领取。 嵌入式开发人员需要具备以下能力&#xff1a; 熟练掌握C/C语…

Kubernetes 的用法和解析 -- 2

一.集群常用指令 1.1 基础控制指令 # 查看对应资源: 状态 $ kubectl get <SOURCE_NAME> -n <NAMESPACE> -o wide [rootkube-master ~]# kubectl get pods -n kuboard -o wide# 查看对应资源: 事件信息 $ kubectl describe <SOURCE_NAME> <SOURCE_NAME_R…

产品入门第五讲:Axure交互和情境

目录 一.Axure交互和情境的介绍 1.交互介绍 概念 常见的Axure交互设计技巧 2.情境介绍 概念 常见的Axure情境设计技巧&#xff1a; 二.实例展示 1.ERP登录页到主页的跳转 2.ERP的菜单跳转到各个页面 &#x1f4da;&#x1f4da; &#x1f3c5;我是默&#xff0c;一个…

七. 使用ts写一个贪吃蛇小游戏

之前学习了几篇的ts基础&#xff0c;今天我们就使用ts来完成一个贪吃蛇的小游戏。 游戏拆解 我们将我们的任务进行简单拆解分析。 首先我们应该有一个窗口&#xff0c;我们叫做屏幕。让蛇在里面移动&#xff0c;所有我们应该想到要设计一个大盒子当作地图。考虑到食物以及蛇…

【LeetCode刷题笔记(7-1)】【Python】【四数之和】【哈希表】【中等】

文章目录 四数之和题目描述示例 1示例 2提示解决方案1&#xff1a;【四层遍历查找】解决方案2&#xff1a;【哈希表】【三层遍历】 结束语 四数之和 四数之和 题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件…

服务器一直掉线怎么回事?

随着网络的高速发展&#xff0c;不管是网站还是游戏&#xff0c;如果遇到服务器卡顿的情况&#xff0c;会造成用户访问网站或进游戏&#xff0c;网站页面长时间无法打开&#xff0c;游戏页面运行卡顿&#xff0c;这样就很容易会造成用户的流失&#xff0c;从而导致业务亏损极大…

可视化数据监控大屏网页界面,数据大屏模版PS资料(免费UI源文件)

数据大屏模板在大数据领域被广泛应用&#xff0c;其优势在于能够将复杂的数据通过图形、图表等方式呈现出来&#xff0c;使数据更易于理解。数据大屏模板可以用来进行数据分析。通过对数据的比较、趋势分析、异常检测等&#xff0c;可以发现数据中的规律和问题&#xff0c;为决…

Appium知多少

Appium我想大家都不陌生&#xff0c;这是主流的移动自动化工具&#xff0c;但你对它真的了解么&#xff1f;为什么很多同学搭建环境时碰到各种问题也而不知该如何解决。 appium为什么英语词典查不到中文含义&#xff1f; appium是一个合成词&#xff0c;分别取自“application…

51单片机项目(21)——基于51单片机的音乐流水灯

1.功能描述 本次所做设计&#xff0c;有流水灯的功能&#xff0c;使用了16颗LED灯&#xff0c;同时还可以播放音乐。单片机存储了三首音乐&#xff0c;通过声音检测模块触发其进行切换。&#xff08;仿真图里面使用一个按键来代码声音检测模块&#xff09; 此外&#xff0c;还…

四十七、Redis分片集群

目录 一、分片集群结构 二、散列插槽 1、Redis如何判断某个key应该在哪个实例&#xff1f; 2、如何将同一类数据固定的保存在同一个Redis实例&#xff1f; 三、集群伸缩 四、故障转移 1、当集群中有一个master宕机时 &#xff08;1&#xff09;自动转移 &#xff08;2&…

ORACLE 如何单机转RAC

生产库停监听 [oracleprimary backup1]$ lsnrctl stop 生产库启停数据库 shutdown immediate Startup mount 生产库全库备份&#xff1a; rmanbackup.sh export ORACLE_BASE/oracle/app export ORACLE_HOME/oracle/app/product/11.2.0/db_1 export ORACLE_SIDtest …

Linux 常用解压命令tar和zip(详细篇)

# tar 入门 介绍 在Linux平台上,tar 命令是主要的归档实用程序。了解各种 tar 命令选项将帮助您掌握归档文件操作。tar 代表磁带存档。 语法 tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-C <目的目录>][-f <备份文件>][--delete][--totals][文件或目录...] 以前 un…

使用opencv的Laplacian算子实现图像边缘检测

1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题&#xff0c;也是经典的技术难题之一。如何快速、精确地提取图像边缘信息&#xff0c;一直是国内外的研究热点&#xff0c;同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…

Linux的文件系统 内核结构

Linux的文件系统 Q1&#xff1a;什么是文件系统&#xff1f; A&#xff1a;在学术的角度下&#xff0c;文件系统指“操作系统用于明确存储设备组织文件的方法”&#xff0c;是“文件管理系统”的简称&#xff0c;本质也是代码&#xff0c;一段程序 Q2&#xff1a;文件系统&…

Java带缓存的单向链表-线程安全

开发原因 ArrayList太重&#xff0c;线程还不安全 在一些队列处理的时候&#xff0c;ArrayList有点麻烦&#xff0c;还比较占内存&#xff0c;还没缓存&#xff0c;又得再加个缓存队列 所以就开发了这个 轻量级&#xff0c;线程安全&#xff0c;带缓存&#xff01;nice!! 源码…

Elasticsearch:相关性工作台 - BM25 及 ELSER 的相关性比较

我们知道 Elastics Learned Sparse EncoderR (ELSER) 可以被用来做语义搜索。它是一个 out-of-domain 的语义搜索模型。无需训练&#xff0c;我们就可以得到很好的相关性。有关 ELSER 的更多知识&#xff0c;请参考文章 “Elastic Learned Sparse Encoder 简介&#xff1a;Elas…

Mac下ERROR: Cannot connect to the Docker daemon

解决Mac下ERROR: Cannot connect to the Docker daemon at unix:///Users/qq/.orbstack/run/docker.sock. Is the docker daemon running? 在Mac系统的中, 如果实际已经安装docker并且已经启动了. 但执行 docker info 时 报错: ERROR: Cannot connect to the Docker daemon …

SpringMVC映射请求数据

1、获取超链接的参数和值 <a href"vote/vote01?namelove">获取超链接的参数</a> //获取超链接的参数RequestMapping(value "/vote01")public String vote01(RequestParam(value "name", requiredfalse) String name){System.out…