You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过子表名称及Schema查询父表名称的SQL语句?

获取PostgreSQL继承表的父表信息的SQL查询

针对你需要通过子表的Schema和名称查询父表详情(名称)的需求,PostgreSQL的系统目录表刚好能解决这个问题——毕竟继承关系是存在系统元数据里的。

核心查询语句

如果你已经明确知道子表的Schema(比如smt)和表名(比如sub_items),可以用这个精准查询:

SELECT 
    n.nspname AS parent_schema,
    c.relname AS parent_table
FROM 
    pg_inherits i
JOIN 
    pg_class c ON i.inhparent = c.oid
JOIN 
    pg_namespace n ON c.relnamespace = n.oid
JOIN 
    pg_class sc ON i.inhrelid = sc.oid
JOIN 
    pg_namespace sn ON sc.relnamespace = sn.oid
WHERE 
    sn.nspname = 'smt' -- 子表的Schema
    AND sc.relname = 'sub_items'; -- 子表的名称

语句解释

  • pg_inherits:PostgreSQL专门存储表继承关系的系统表,inhrelid是子表的唯一标识OID,inhparent是对应的父表OID
  • pg_class:存储所有数据库对象(表、索引等)的基本信息,relname就是我们要的表名,oid是关联用的唯一标识
  • pg_namespace:存储Schema(命名空间)的信息,nspname对应Schema名称

针对你的表结构验证

用你提供的建表语句创建的smt.sub_items继承自smt.items,执行上面的查询后,会返回:

parent_schemaparent_table
smtitems

如果需要更通用的查询(比如列出所有继承表及其父表),可以去掉WHERE条件:

SELECT 
    sn.nspname AS child_schema,
    sc.relname AS child_table,
    n.nspname AS parent_schema,
    c.relname AS parent_table
FROM 
    pg_inherits i
JOIN 
    pg_class c ON i.inhparent = c.oid
JOIN 
    pg_namespace n ON c.relnamespace = n.oid
JOIN 
    pg_class sc ON i.inhrelid = sc.oid
JOIN 
    pg_namespace sn ON sc.relnamespace = sn.oid;

内容的提问来源于stack exchange,提问作者data_addict

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:04:12