Postgresql查看分区表

当我们针对一个数据比较大的表时,会对该表进行分区操作,创建后,想知道创建了多少,可以通过下面的sql来查询

-- partition_table_name是主表,我这边的分区规则是按天分区,格式partition_table_name_yyyyMMdd
-- 所以我这边带了查询条件
SELECT * FROM pg_class
where relname like 'partition_table_name_%' 
and relname < 'partition_table_name_202209'

### 查看PostgreSQL中的表分区PostgreSQL 中,可以通过多种方式来查看表的分区情况。对于继承式分区(传统方法),可以利用 `pg_inherits` 系统目录以及查询特定模式下的所有子表。 #### 方法一:通过 pg_inherits 和 information_schema.tables 为了获取父级分区表及其对应的子分区列表,可执行如下 SQL 查询: ```sql SELECT concat('Parent Table: ', p.tablename, E'\n') || string_agg(concat('Partition: ', c.relname), E',\n') FROM pg_class c JOIN pg_inherits i ON c.oid = i.inhrelid JOIN pg_class pc ON i.inhparent = pc.oid JOIN pg_tables p ON pc.relname = p.tablename WHERE c.relkind = 'r' AND p.schemaname NOT IN ('pg_catalog', 'information_schema') GROUP BY p.tablename; ``` 此脚本会返回每个作为父类存在的表格名称连同它所拥有的各个分片的名字[^1]。 #### 方法二:针对声明式分区 (Declarative Partitioning) 自版本 10 起引入了更简便的方式定义和管理范围、列表类型的分区结构。要检查这些现代风格下创建出来的对象,则应该查阅 `pg_partitioned_table` 及关联视图。 下面是一条适用于此类情形的命令: ```sql SELECT partition_strategy, string_agg(partition_key::text, ',' ORDER BY subpartition_level) AS keys FROM ( SELECT DISTINCT pt.partition_strategy, unnest(pg_get_expr(def.adbin, def.adrelid)::text[]) as partition_key, row_number() OVER () % 2 AS subpartition_level FROM pg_attribute att JOIN pg_attrdef def ON att.attnum = def.adnum AND att.attrelid = def.adrelid JOIN pg_partitioned_table pt ON att.attrelid = pt.partrelid WHERE att.atthasdef IS TRUE AND att.attisdropped IS FALSE AND format_type(atttypid, atttypmod) LIKE '%partition%' ) t GROUP BY partition_strategy; ``` 上述语句能够展示关于给定数据库内已知分区策略的信息,并指出用于划分数据的关键字段。 另外,在日常开发维护过程中如果仅需简单确认某张表是否为分区表,可以直接尝试运行 `\d+ 表名` 命令于psql客户端工具之中;这将提供有关该实体更为详尽的数据字典描述,其中便包含了其所属类别——即常规表还是某种形式上的分区体。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值