2016-10-24 6 views
2

私はビューをテーブルに依存しています:create hello_v as select from hello; 参照名から参照されたテーブル名を検索するには、pg_classとpg_dependテーブルが便利かもしれないと思います。 テーブルを切り捨てると、pg_dependにエントリがありません。pg_catalog.pg_class.relfilenode after truncate

pg_depend.refobjidに戻る方法は、pg_catalog.relfilenodeと同じですか?

私は私の視点を再現することができます

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; 

感謝。

答えて

0

あなたの参加条件が間違っています。 relfilenodeではなく、c.oidと結合したいと思っています。

これは正しく表を示しています

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;