我使用的是PostgreSQL,我试图列出所有表中有特定列作为外键/引用的表.这能做到吗?我确信这些信息存储在information_schema的某个地方,但我不知道如何开始查询它.

推荐答案

SELECT
    r.table_name
FROM information_schema.constraint_column_usage       u
INNER JOIN information_schema.referential_constraints fk
           ON u.constraint_catalog = fk.unique_constraint_catalog
               AND u.constraint_schema = fk.unique_constraint_schema
               AND u.constraint_name = fk.unique_constraint_name
INNER JOIN information_schema.key_column_usage        r
           ON r.constraint_catalog = fk.constraint_catalog
               AND r.constraint_schema = fk.constraint_schema
               AND r.constraint_name = fk.constraint_name
WHERE
    u.column_name = 'id' AND
    u.table_catalog = 'db_name' AND
    u.table_schema = 'public' AND
    u.table_name = 'table_a'

它使用完整的catalog/schema/name三元组从所有3个信息模式视图中标识db表.你可以根据需要放下一两个.

该查询列出了对表"d"中的列"a"具有外键约束的所有表

Sql相关问答推荐

在SQL中向每个子字节组添加字节行

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

查询页面推荐

将日期时间转换为日期格式

为什么我的SQL标量函数有时会抛出";子查询返回多个值.这是不允许的.

嵌套Json对象的SQL UPDATE WHERE

每个学校 Select N个最新的行,但跳过同一学生的重复行

SQL按组 Select 最小值,当值不存在时为Null

聚合内部的条件在哪里?

从另一个没有公共键的表中获取值来加入

SQL 根据前一天的最大值计算每天的值数

将一名成员金额分配给群组内的其他成员

在where语句中使用CTE非常缓慢

使用SQLAlchemy和Postgres数据库创建新行时,为什么我的创建日期比更新日期晚?

标量子查询中的窗口函数不起作用

比使用NOT EXISTS更高效的SQL删除方法是什么?

在 SQL 中使用循环遍历按时间顺序排列的数据

如何根据某个值在where子句中添加某个条件

postgres按组消除分区中的NULLS

具有关联统计信息 N+1 的 Rails 6 索引资源?