database - 如何在 Postgresql 中找到包含主键或单个表的特定列的所有数据库表

标签 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  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') 

关于database - 如何在 Postgresql 中找到包含主键或单个表的特定列的所有数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22985789/

相关文章:

php - 检索与输入的用户名匹配的所有用户的最后一条消息

java - Spring JDBCTemplate : Construct JSON without special characters

mySQL:什么阻止了我的外键约束?

javascript - addEventListener 不起作用,总是返回 null

更新数据库中的表时出现 MySQLTransactionRollbackException

postgresql - 我应该同时指定 INDEX 和 UNIQUE INDEX 吗?

sql - Postgresql 替换函数

nhibernate - SQLite 与 NHibernate 结合是否支持参照完整性/外键?

ruby-on-rails - rails 4 中的外键

php - 为什么要使用 MySQL 数据库缓存?