postgresql/greenplum查询依赖于表上的视图
发布时间:2020-12-13 18:23:45 所属栏目:百科 来源:网络整理
导读:在postgresql、greenplum中,我们经常需要重建某张表,为了方便回滚,我们一般将原表rename掉,然后重建原表。 这样子,就会有一个问题:依赖于原表的视图还是依赖于rename的表,没有依赖于新表。这是因为视图定义的时候是根据表的oid来定义了,原表rename后
在postgresql、greenplum中,我们经常需要重建某张表,为了方便回滚,我们一般将原表rename掉,然后重建原表。 这样子,就会有一个问题:依赖于原表的视图还是依赖于rename的表,没有依赖于新表。这是因为视图定义的时候是根据表的oid来定义了,原表rename后,oid没有变,这样子就导致了视图依赖错误的表。 查询依赖于某一个表的视图比较麻烦,要通过pg_depend这个数据字典来查询,但是用起来很不方便。
下面提供一个视图,方便查询依赖于表上的视图。
1.首先定义一个函数,将oid快速转换成schemaname.tablename. CREATE or replace FUNCTION public.tabname_oid(a oid) RETURNS text AS $$ 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.效果如下:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SAXREADER读取xml文件,报字节 UTF-8 序列的无效字节 1。 N
- 在Swift中,如何为init的实现创建类值而不是调用现有init的类
- ruby – kernel_require.rb:55:在`require’中:无法加载
- 【个推推送】如果接受不到推送,如果你确定所有的xml配置都
- Flex 复杂XML 解析XML
- 14.6 Swift中weak解决循环强引用
- reactjs – BrowserslistError:React / Express App中未知
- cocos2dx-数学函数ccp
- VB.NET<机房收费系统个人重构版>你都学会了什么(之五)
- postgresql – Postgres不使用带有“ORDER BY”的索引