2
我有一个视图取决于一个表:create view hello_v as select * from hello; 要从视图名称检索引用的表名,我认为pg_class和pg_depend表可能会有用。 截断表格导致pg_depend中没有条目。pg_catalog.pg_class.relfilenode截断后
如何返回等于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;
感谢。