Vis*_*mar 17 postgresql partitioning
我想列出 PostgreSQL 9.1 中由动态触发器创建的所有分区。
我能够使用Frank Heikens 的这个相关答案生成分区计数。
我有一个表foo
有一个INSERT触发器创建foo_1
,foo_2
等动态。插入的分区是根据主键 id 选择的,这是一种基于范围的分区。
是否可以显示 table 的当前所有分区foo
?
dez*_*zso 25
使用您链接的答案中的第一个查询并添加一个简单的WHERE
子句来获取单个表的分区:
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child_schema,
child.relname AS child
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
WHERE parent.relname='parent_table_name';
Run Code Online (Sandbox Code Playgroud)
Erw*_*ter 13
使用对象标识符类型regclass
进行非常简单的查询:
SELECT inhrelid::regclass AS child -- optionally cast to text
FROM pg_catalog.pg_inherits
WHERE inhparent = 'my_schema.foo'::regclass;
Run Code Online (Sandbox Code Playgroud)
列出给定父表的所有子表parent_schema.foo
。模式限定是可选的,search_path
如果缺少则决定可见性。
同样,返回的表名是模式限定的,并在必要时自动转义。安全、快速、简单。
该解决方案也适用于 Postgres 10 或更高版本中的声明式分区,因为引用手册:
单个分区通过幕后继承链接到分区表;
SELECT tableoid::regclass AS source, *
FROM my_schema.foo
WHERE <some_condition>;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38526 次 |
最近记录: |