Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
检查表是否从PostgreSQL中的其他表继承_Sql_Database_Postgresql_Inheritance - Fatal编程技术网

检查表是否从PostgreSQL中的其他表继承

检查表是否从PostgreSQL中的其他表继承,sql,database,postgresql,inheritance,Sql,Database,Postgresql,Inheritance,在PostgreSQL中,这些表 CREATE TABLE cities ( name text, population float, altitude int -- in feet ); CREATE TABLE cities_capitals ( state char(2) ) INHERITS (cities); 如何以编程方式检查这些表中的一个是否从另一个表继承?(考虑信息模式、

在PostgreSQL中,这些表

CREATE TABLE cities (
    name            text,
    population      float,
    altitude        int     -- in feet
);

CREATE TABLE cities_capitals (
    state           char(2)
) INHERITS (cities);
如何以编程方式检查这些表中的一个是否从另一个表继承?(考虑信息模式、pg目录等)


城市的首都应为
true
,城市应为
false

有一个目录表:

目录
pgu继承
记录有关表继承的信息 等级制度。中的每个直接子表都有一个条目 数据库(间接继承可以通过以下链确定 参赛作品数目。)

以下是一个符合您问题的查询:

SELECT EXISTS (
   SELECT 1
   FROM   pg_catalog.pg_inherits
   WHERE  inhrelid = 'public.cities_capitals'::regclass
   );
TRUE
如果表
cities\u capitals
从某处继承,则为else
FALSE


架构限定名称以确保。

以下语句将检索城市继承自的表。如果该表不是从另一个表继承的,则结果将为空:

select bt.relname as table_name, bns.nspname as table_schema 
from pg_class ct 
    join pg_namespace cns on ct.relnamespace = cns.oid and cns.nspname = 'public' 
    join pg_inherits i on i.inhrelid = ct.oid and ct.relname = 'cities ' 
    join pg_class bt on i.inhparent = bt.oid 
    join pg_namespace bns on bt.relnamespace = bns.oid
从Postgresql AutoDoc中,我找到了以下SQL:

SELECT parnsp.nspname AS par_schemaname
    , parcla.relname AS par_tablename
    , chlnsp.nspname AS chl_schemaname
    , chlcla.relname AS chl_tablename
 FROM pg_catalog.pg_inherits
 JOIN pg_catalog.pg_class AS chlcla ON (chlcla.oid = inhrelid)
 JOIN pg_catalog.pg_namespace AS chlnsp ON (chlnsp.oid = chlcla.relnamespace)
 JOIN pg_catalog.pg_class AS parcla ON (parcla.oid = inhparent)
 JOIN pg_catalog.pg_namespace AS parnsp ON (parnsp.oid = parcla.relnamespace)

这很有帮助,因为您可以通过一个查询在两个方向上进行测试。

我应该如何将inhrelid与架构中的表名关联?@AxelFontaine:我已添加到我的答案中。其实很简单——一旦你知道了