检查表是否从PostgreSQL中的其他表继承
在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); 如何以编程方式检查这些表中的一个是否从另一个表继承?(考虑信息模式、
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
从某处继承,则为elseFALSE
架构限定名称以确保。以下语句将检索城市继承自的表。如果该表不是从另一个表继承的,则结果将为空:
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:我已添加到我的答案中。其实很简单——一旦你知道了