代码之家  ›  专栏  ›  技术社区  ›  Watusimoto

如何查找从psql中的另一个表继承的子表

  •  19
  • Watusimoto  · 技术社区  · 15 年前

    在psql中,有没有一种好的方法可以找到从另一个表继承的所有表?理想情况下,我可以从SQL查询中获取数据,但此时,我对任何可靠的方法都感到满意。

    3 回复  |  直到 8 年前
        1
  •  33
  •   Michael Krelin - hacker    15 年前

    “来自SQL查询”是什么意思?这是不是意味着 SELECT 来自 pg_inherits 对你来说不够好吗?

    SELECT pg_inherits.*, c.relname AS child, p.relname AS parent
    FROM
        pg_inherits JOIN pg_class AS c ON (inhrelid=c.oid)
        JOIN pg_class as p ON (inhparent=p.oid);
    
        2
  •  4
  •   Jeroen    10 年前

    如果还需要架构名称:

    SELECT cn.nspname AS schema_child, c.relname AS child, pn.nspname AS schema_parent, p.relname AS parent
    FROM pg_inherits 
    JOIN pg_class AS c ON (inhrelid=c.oid)
    JOIN pg_class as p ON (inhparent=p.oid)
    JOIN pg_namespace pn ON pn.oid = p.relnamespace
    JOIN pg_namespace cn ON cn.oid = c.relnamespace
    WHERE p.relname = 'your table name' and pn.nspname = 'your schema name'
    
        3
  •  1
  •   user3612491    8 年前

    如果要从主分区中查找所有子分区,只需执行如下操作:

    SELECT relname
    FROM pg_class,pg_inherits
    WHERE pg_class.oid=pg_inherits.inhrelid
    AND inhparent
    IN (SELECT oid FROM pg_class WHERE relname='your_master_partition')
    ORDER BY relname;