Database 如何在Postgresql中找到包含主键或单个表的特定列的所有db表

Database 如何在Postgresql中找到包含主键或单个表的特定列的所有db表,database,postgresql,foreign-keys,primary-key,database-metadata,Database,Postgresql,Foreign Keys,Primary Key,Database Metadata,如何在Postgresql数据库中找到包含主键或单个表的特定列的所有数据库表。表示特定表的列,该列作为外键或非外键包含在许多表中。…列可以是主键或非主键。请使用下文查询以查找单个表的特定列: SELECT table_name FROM information_schema.columns WHERE table_schema = 'public' AND column_name = 'YOUR_COLUMN_NAME' 使用下面的查询查找包含主键的数据库的所有表的列表 SELECT

如何在Postgresql数据库中找到包含主键或单个表的特定列的所有数据库表。表示特定表的列,该列作为外键或非外键包含在许多表中。…列可以是主键或非主键。

请使用下文查询以查找单个表的特定列

SELECT table_name
FROM information_schema.columns
WHERE table_schema = 'public'
  AND column_name   = 'YOUR_COLUMN_NAME'
使用下面的查询查找包含主键的数据库的所有表的列表

 SELECT  t.table_catalog, 
         t.table_schema, 
         t.table_name, 
         kcu.constraint_name, 
         kcu.column_name, 
         kcu.ordinal_position 
FROM    INFORMATION_SCHEMA.TABLES t 
         LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
                 ON tc.table_catalog = t.table_catalog 
                 AND tc.table_schema = t.table_schema 
                 AND tc.table_name = t.table_name 
                 AND tc.constraint_type = 'PRIMARY KEY' 
         LEFT JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE kcu 
                 ON kcu.table_catalog = tc.table_catalog 
                 AND kcu.table_schema = tc.table_schema 
                 AND kcu.table_name = tc.table_name 
                 AND kcu.constraint_name = tc.constraint_name 
WHERE   t.table_schema NOT IN ('pg_catalog', 'information_schema') 
ORDER BY t.table_catalog, 
         t.table_schema, 
         t.table_name, 
         kcu.constraint_name, 
         kcu.ordinal_position; 

使用下面的查询查找另一个表中具有外键的表的列表

 SELECT  t.table_name as FK_Table, tc.constraint_name,tc.constraint_type,ccu.table_name as PK_Table
FROM    INFORMATION_SCHEMA.TABLES t 
         INNER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc 
                 ON tc.table_catalog = t.table_catalog 
                 AND tc.table_schema = t.table_schema 
                 AND tc.table_name = t.table_name 

         INNER JOIN INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE ccu 
                 ON ccu.constraint_name = tc.constraint_name
           /* Remove comments for check based on CONSTRAINT'name OR 'PRIMARY_KEY' name */ 
                --and ccu.constraint_name = 'CONSTRAINT_NAME' 
                --and  AND ccu.column_name = 'COLUMN_NAME'
WHERE   t.table_schema NOT IN ('pg_catalog', 'information_schema') 

选择t.table\u name作为FK\u table,tc.constraint\u name,tc.constraint\u type,ccu.table\u name作为PK\u table来自信息\u SCHEMA.TABLES t内部联接信息\u SCHEMA.table\u约束tc ON tc.table\u catalog=t.table\u catalog和tc.table\u SCHEMA=t.table\u SCHEMA和tc.table\u name=t.table\u name内部联接信息\u SCHEMA.CONSTRAINT\u列使用ccu ON ccu.CONSTRAINT\u name=tc.CONSTRAINT\u name和ccu.table\u name='YOUR_TABLE_NAME'和ccu.column_NAME='YOUR_column_NAME',其中t.TABLE_模式不在('pg_catalog','information_schema');这是一个很好的例子,这对我帮助很大。