postgresql/greenplum查詢依賴於表上的視圖

來源:互聯網
上載者:User

       在postgresql、greenplum中,我們經常需要重建某張表,為了方便復原,我們一般將原表rename掉,然後重建原表。

       這樣子,就會有一個問題:依賴於原表的視圖還是依賴於rename的表,沒有依賴於新表。這是因為視圖定義的時候是根據表的oid來定義了,原表rename後,oid沒有變,這樣子就導致了視圖依賴錯誤的表。

       查詢依賴於某一個表的視圖比較麻煩,要通過pg_depend這個資料字典來查詢,但是用起來很不方便。

       下面提供一個視圖,方便查詢依賴於表上的視圖。

1.首先定義一個函數,將oid快速轉換成schemaname.tablename.

CREATE or replace FUNCTION public.tabname_oid(a oid)  RETURNS textAS $$  return plpy.execute("select b.nspname||'.'||a.relname as tabname from pg_class a,pg_namespace b wherea.relnamespace=b.oid and a.oid=%s"%(a))[0]['tabname'];$$ LANGUAGE plpythonu;

2.建立查詢檢視

     create view public.views_on_tables as    select tabname_oid(c.ev_class) viewname,tabname_oid(pc.oid) tablename     from pg_depend a,pg_depend b,pg_class pc,pg_rewrite c    where a.refclassid=1259            and b.deptype='i'      and a.classid=2618      and a.objid=b.objid      and a.classid=b.classid      and a.refclassid=b.refclassid      and a.refobjid<>b.refobjid      and pc.oid=a.refobjid           and c.oid=b.objid      group by c.ev_class,pc.oid;

3.效果如下:

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.