今天更新两个SQL。是用来查询PG中,主表被子表引用的外键,或子表引用了哪个主表的主键。

废话不多说,直接上实验!

=============================================

CentOS 7 + PG 10

创建两个实验表,test01为主表,test02为子表,test02引用test01中的id列。

test=# create table test01(

test(# id int primary key,

test(# col1 varchar(20)

test(# );

CREATE TABLE

test=# create table test02(

test(# id int primary key,

test(# test01_id int references test01(id),

test(# col1 varchar(20)

test(# );

CREATE TABLE

插入数据

test=# insert into test01 values (1, 'a');

INSERT 0 1

test=# insert into test01 values (2, 'b');

INSERT 0 1

test=# insert into test01 values (3, 'c');

INSERT 0 1

test=# insert into test02 values (1, 1, 'a');

INSERT 0 1

test=# insert into test02 values (2, 1, 'a');

INSERT 0 1

test=# insert into test02 values (3, 1, 'a');

INSERT 0 1

test=# insert into test02 values (4, 2, 'b');

INSERT 0 1

test=# insert into test02 values (5, 2, 'b');

INSERT 0 1

test=# insert into test02 values (6, 11, 'b');

ERROR: insert or update on table "test02" violates foreign key constraint "test02_test01_id_fkey"

DETAIL: Key (test01_id)=(11) is not present in table "test01".

查询主表被哪个子表引用。如果结果为空,说明没有任何子表引用的该表。

test=# SELECT

tc.constraint_name,

tc.table_name, # 子表

kcu.column_name,

ccu.table_name AS foreign_table_name, # 主表

ccu.column_name AS foreign_column_name,

tc.is_deferrable,

tc.initially_deferred

FROM

information_schema.table_constraints AS tc

JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name

JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name

where constraint_type = 'FOREIGN KEY' AND ccu.table_name='test01'; # 输入主表

constraint_name | table_name | column_name | foreign_table_name | foreign_column_name | is_deferrable | initially_deferred

-----------------------+------------+-------------+--------------------+---------------------+---------------+--------------------

test02_test01_id_fkey | test02 | test01_id | test01 | id | NO | NO

(1 row)

查询子表引用的哪个主表。如果结果为空,说明没有任何引用主表。

test=# SELECT

tc.constraint_name,

tc.table_name, # 子表

kcu.column_name,

ccu.table_name AS foreign_table_name,

ccu.column_name AS foreign_column_name, # 主表

tc.is_deferrable,

tc.initially_deferred

FROM

information_schema.table_constraints AS tc

JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name

JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name

WHERE constraint_type = 'FOREIGN KEY' AND tc.table_name='test02'; # 输入子表

constraint_name | table_name | column_name | foreign_table_name | foreign_column_name | is_deferrable | initially_deferred

-----------------------+------------+-------------+--------------------+---------------------+---------------+--------------------

test02_test01_id_fkey | test02 | test01_id | test01 | id | NO | NO

(1 row)

Postgresql - 查询表引用或被引用的外键相关推荐

  1. mysql 所有外键_mysql中的外键

    mysql中的外键 1.默认的外键存在之后,会对数据进行约束. 1)约束1:如果子表中添加的数据,外键字段对应的数据如果在父表中不存在,那么添加失败. 有数据之后: 修改:可以修改跟外键不相关的任何字 ...

  2. mysql级联删除外键约束_MySQL外键约束、级联更新、级联删除

    MySQL支持外键(foreign key),外键允许跨表交叉引用相关数据,另外外键约束能够保证相关数据的一致性.一个外键关系通常包括一个父表和一个子表.父表包含原始的字段数据,子表引用父表中该字段的 ...

  3. mysql外键和自动自增

    1.外键 MySQL支持外键(允许跨表交叉引用相关数据)和外键约束(有助于保持相关数据的一致 性). 外键关系涉及一个包含初始列值的父表,以及一个包含引用父列值的列值的子表.在子表上定 义了外键约束. ...

  4. Mysql--主键和外键,范式和表与表的关系

    1.数据冗余 数据冗余:关系型数据库的数据冗余主要是指关系数据库中同一信息数据的重复存储 数据冗余分类: 1.表的重复 2.属性的重复:不同表的属性重复,常用来建立表之间的联系只需一个公共属性,是必须 ...

  5. restrict 外键约束_外键约束

    [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (col_name, ...) REFERENCES tbl_name (col_name,...) [O ...

  6. mysql主键约束和外键约束的作用_MySQL中的主键约束和外键约束

    1.主键约束 表通常具有包含唯一标识表中每一行的值的一列或一组列. 这样的一列或多列称为表的主键 (PK),用于强制表的实体完整性. 由于主键约束可保证数据的唯一性,因此经常对标识列定义这种约束. 如 ...

  7. SQL的主键和外键的作用

    SQL 的主键和外键的作用: 外键取值规则:空值或参照的主键值 (1)插入非空值时,如果主键值中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,可以在建外键 ...

  8. postgreSQL外键引用查询 查询外键被那些表占用

    根据一个表名,查询所有外键引用它的表,以及那些外键的列名 key_column_usage(系统列信息表), pg_constraint(系统所有约束表) SELECT x.table_name,x. ...

  9. mysql查询某张表的所有外键_oracle中查询所有外键引用到某张表的记录

    欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 oracle中查询所有外键引用到某张表的记录 //查询表的主键约束名 select * from user_constr ...

最新文章

  1. 工作中用到的java反射机制_(转)JAVA-反射机制的使用
  2. c语言六角填数答案,【蓝桥杯】第五届-6-六角填数
  3. 数学--数论---欧拉筛 模板
  4. MVC是架构模式,而不是设计模式
  5. Azure与Scott Guthrie:Azure安全中心和基于角色的访问控制
  6. JavaScript学习第一天(一)
  7. centos通过添加chrome源来安装chrome
  8. php 查找文件 替换内容,关于php:文件中查找和替换功能困扰
  9. 关于在Servlet的路径问题
  10. 后端服务慢成狗?试试这 7 招!
  11. jsp九大内置对象简述
  12. Redis开发与运维教程
  13. i2c时序图(AT24C08)
  14. 怎样找到win7系统默认的微信缓存文件夹路径
  15. 解决Maven cannot access in offline mode问题
  16. 关于hping打流测试工具
  17. Excel数据可视化竟可以如此惊艳!数据可视化大屏制作
  18. php 图片透明,PHP_功能强大的PHP图片处理类(水印、透明度、旋转),非常强大的php图片处理类,可 - phpStudy...
  19. UOS V20 SP1 升级到Update1 后WPS无法打开
  20. abs传感器电压有几伏电_怎样判断abs传感器坏了 万能表测abs传感器好坏

热门文章

  1. python中text格式_python读取各种格式的文本
  2. 激荡十年:详谈云计算的过去、现在和未来
  3. baiduRanking多站点批量百度排名查询
  4. 【关于Log4j2】
  5. windows连接蓝牙失败
  6. React Native 后台执行计时器react-native-background-timer
  7. CSS3精选内容通俗易懂
  8. springboot skywalking tranceId tid
  9. 软件版本中的Alpha,Beta,RC,Trial是什么意思
  10. 微信公众号平台服务器配置请求url超时,绑定微信公众平台提示请求URL超时怎么办...