我有一个依赖于表的视图: create view hello_v as select * from hello;要从视图名称中检索被引用的表名,我认为pg_class和pg_depend表可能会很有用。对表进行截断会导致pg_depend中没有条目。
如何返回等于pg_catalog.relfilenode的pg_depend.refobjid?
我可以重复我的观点:
select version();
create table hello(name text);
create view hello_v as select * from hello;
select c.relname, c.relfilenode from pg_catalog.pg_class c inner join pg_catalog.pg_depend d on d.refobjid = c.relfilenode
where c.relname in ('hello', 'hello_v') group by relname, relfilenode order by c.relname;
relname | relfilenode
---------+-------------
hello | 305818
hello_v | 305824
truncate hello;
select c.relname, c.relfilenode from pg_catalog.pg_class c inner join pg_catalog.pg_depend d on d.refobjid = c.relfilenode
where c.relname in ('hello', 'hello_v') group by relname, relfilenode order by c.relname;
relname | relfilenode
---------+-------------
hello_v | 305824
-- I hope to exist a record where relname = hello and relfilenode = xxx或者简单地说:
create table hello(name text);
select c.relname, c.relfilenode from pg_catalog.pg_class c inner join pg_catalog.pg_depend d on d.refobjid = c.relfilenode
where c.relname = 'hello' group by relname, relfilenode order by c.relname;
truncate hello;
select c.relname, c.relfilenode from pg_catalog.pg_class c inner join pg_catalog.pg_depend d on d.refobjid = c.relfilenode
where c.relname = 'hello' group by relname, relfilenode order by c.relname;谢谢。
发布于 2017-08-15 19:05:01
您的联接条件错误。你想加入的是c.oid,而不是relfilenode。
这将正确显示您的表:
select c.relname, c.relfilenode from pg_catalog.pg_class c inner join pg_catalog.pg_depend d on d.refobjid = c.oid
where c.relname = 'hello' group by relname, relfilenode order by c.relname;https://stackoverflow.com/questions/40223121
复制相似问题