加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_泰州站长网 (http://www.0523zz.com/)- 视觉智能、AI应用、CDN、行业物联网、智能数字人!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用表,字段和模式名称查找引用的表名

发布时间:2021-01-11 12:27:39 所属栏目:MsSql教程 来源:网络整理
导读:我有一个要求,我需要通过表中的特定字段(外键表)使用此字段名称,表名(此字段所在的位置)和模式名称(其中)查找引用的表名(主键表名)桌子,因此场地居住) 例如: Schema1.TableA Id (Integer,PK) Name varcharSchema2.TableB Id (integer,PK) A_Id (integer,F

我有一个要求,我需要通过表中的特定字段(外键表)使用此字段名称,表名(此字段所在的位置)和模式名称(其中)查找引用的表名(主键表名)桌子,因此场地居住)

例如:

Schema1.TableA
  Id (Integer,PK)  
  Name varchar


Schema2.TableB
  Id (integer,PK)  
  A_Id (integer,FK referencing TableA.Id)  
  Name varchar

我需要将A_Id,TableB和Schema2传递给函数并获取Schema1.TableA作为结果.

我正在使用Postgres 8.3.

解决方法

如果您不需要将其移植到另一个RDBMS,那么在pg_catalog中使用目录表而不是标准信息模式会更快更简单:
SELECT c.confrelid::regclass::text AS referenced_table,c.conname AS fk_name,pg_get_constraintdef(c.oid) AS fk_definition
FROM   pg_attribute a 
JOIN   pg_constraint c ON (c.conrelid,c.conkey[1]) = (a.attrelid,a.attnum)
WHERE  a.attrelid = '"Schema2"."TableB"'::regclass   -- table name
AND    a.attname  = 'A_Id'                           -- column name  
AND    c.contype  = 'f'
ORDER  BY conrelid::regclass::text,contype DESC;

返回:

referenced_table | fk_name  |  fk_definition
------------------+-------------------------+----------------------------------------------
 Schema1.TableA   | b1_fkey  | FOREIGN KEY ("B_id") REFERENCES "Schema1"."TableA"("A_id")

笔记

>另外两列仅用于定向.根据你的Q,你只需要第一列.
>这将返回涉及给定列名的所有外键的所有引用表 – 包括多列上的FK约束.
>根据当前search_path设置的可见性,名称将自动进行模式限定.该名称也会在需要时自动转义(非法或大写字符,保留字,…).

查看手册中的pg_constraintpg_attribute的详细信息.还有更多关于object identifier types.

有关:

> PostgreSQL drop constraint with unknown name
> Retrieving all PK and FK

(编辑:云计算网_泰州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读