我可以使用information_schema
很好地找到属于某个表的所有外键但我无法弄清楚如何从OTHER表中找到引用某个表的外键。
我想知道的是我的数据库中的哪些表引用了我的一个表的主键。
答案 0 :(得分:1)
让我们制作一些可用于测试的表格。
cellLayoutMarginsFollowReadableWidth = false
我更喜欢将information_schema视图用于这种东西,因为我学到的东西可以移植到其他数据库管理系统。
我通常将串联留给应用程序,但我认为是 如果我连接列并给它们别名,这里更容易理解输出。细心的程序员将在所有连接中使用“全名” - 目录(数据库),模式和名称。
create table test (
n integer primary key
);
-- There might be more than one schema.
create schema scratch;
create table scratch.a (
test_n integer not null references test (n),
incept_date date not null default current_date,
primary key (test_n, incept_date)
);
create table b (
test_n integer not null references test (n),
incept_date date not null default current_date,
primary key (test_n, incept_date)
);
-- The same table name can exist in different schemas.
create table scratch.b (
test_n integer not null references test (n),
incept_date date not null default current_date,
primary key (test_n, incept_date)
);
referenced_table full_constraint_name referencing_table -- sandbox.public.test sandbox.public.b_test_n_fkey sandbox.public.b sandbox.public.test sandbox.scratch.a_test_n_fkey sandbox.scratch.a sandbox.public.test sandbox.scratch.b_test_n_fkey sandbox.scratch.b
我认为这会让你开始。外键不必引用主键;它可以引用任何候选键。此查询告诉您哪些表具有我们的测试表的外键,sandbox.public.test,这似乎是您正在寻找的。 p>
答案 1 :(得分:0)
这是你要找的吗?
SELECT * FROM pg_constraint WHERE confrelid=<oid of destination table>
或者,如果您只想以交互方式查看它们,则会在\d <table name>
的{{1}}输出中显示。