嗨,我一直在搜索互联网,但似乎找不到解决方法...
我正在尝试列出postgresql中所有带有引用的列。 在mysql中,查询语句如下:
select table_schema, table_name, column_name, referenced_table_schema, referenced_table_name, referenced_column_name from informatioN_schema.key_column_usage where table_schema = '(Table Schema)';
结果如下:
setandlog | access | kode_privilege | NULL | NULL | NULL
setandlog | access | kode_feature | NULL | NULL | NULL
setandlog | access | kode_app | NULL | NULL | NULL
setandlog | access | kode_credential | NULL | NULL | NULL
setandlog | access | username | NULL | NULL | NULL
setandlog | access | kode_credential | setandlog | cred_access | kode_credential
setandlog | access | kode_privilege | setandlog | cred_access | kode_privilege
setandlog | access | kode_feature | setandlog | cred_access | kode_feature
setandlog | access | kode_app | setandlog | cred_access | kode_app
setandlog | access | username | setandlog | login | username
但是当我尝试在PostgreSQL中使用以下查询时:
select r.table_schema as table_schema, r.table_name as table_name, r.column_name as column_name, u.table_schema as referenced_table_schema, u.table_name as referenced_table_name, u.column_name as referenced_column_name
from INFORMATION_SCHEMA.CONSTRAINT_COLUMN_USAGE as u
inner join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS as 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 as R
ON R.CONSTRAINT_CATALOG = FK.CONSTRAINT_CATALOG
AND R.CONSTRAINT_SCHEMA = FK.CONSTRAINT_SCHEMA
AND R.CONSTRAINT_NAME = FK.CONSTRAINT_NAME
结果不像在MySQL查询中我所期望的那样......以下是结果:
setandlog | access | kode_credential | setandlog | cred_access | kode_credential
setandlog | access | kode_privilege | setandlog | cred_access | kode_credential
setandlog | access | kode_feature | setandlog | cred_access | kode_credential
setandlog | access | kode_app | setandlog | cred_access | kode_credential
setandlog | access | kode_credential | setandlog | cred_access | kode_privilege
setandlog | access | kode_privilege | setandlog | cred_access | kode_privilege
setandlog | access | kode_feature | setandlog | cred_access | kode_privilege
setandlog | access | kode_app | setandlog | cred_access | kode_privilege
setandlog | access | kode_credential | setandlog | cred_access | kode_feature
setandlog | access | kode_privilege | setandlog | cred_access | kode_feature
setandlog | access | kode_feature | setandlog | cred_access | kode_feature
setandlog | access | kode_app | setandlog | cred_access | kode_feature
setandlog | access | kode_credential | setandlog | cred_access | kode_app
setandlog | access | kode_privilege | setandlog | cred_access | kode_app
setandlog | access | kode_feature | setandlog | cred_access | kode_app
setandlog | access | kode_app | setandlog | cred_access | kode_app
setandlog | access | username | setandlog | login | username
看起来有很多冗余数据……
当我检查查询时,在INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
表中的UNIQUE_CONSTRAINT_NAME
没有任何差异……
有人能帮我解决这个问题吗?
select * from pg_constraint where contype = 'f';
时,我得到了一个名为conkey
的列,其值为'{2,3,4,5}'
,以及一个名为confkey
的列,其值为'{1,2,3,4}'
,从中可以看出position_in_unique_constraint
是否代表了confkey
?无论如何,它都像魅力一样工作!谢谢:D - Raqasyinovinformation_schema
视图是建立在系统目录上的,并且它使用恰好这个表pg_constraint
来填充视图和两个数组对应于ordinal_position
和position_in_unique_constraint
。 - Patrickinformation_schema
中的大多数表都是基于pg_catalog
表的...你能给我一些参考资料/书籍,让我学习information_schema
和pg_catalog
之间的关系吗?非常感谢您的帮助 :) - Raqasyinov