- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
greenplum数据字典
greenplum是基于postgresql开发的分布式数据库,里面大部分的数据字典是一样的。我们在维护gp的时候对gp的数据字典比较熟悉,特此分享给大家。在这里不会详细介绍每个字典的内容,只会介绍常见的应用以及一些已经封装好了的函数。具体的介绍大家可以去看postgresql的中文文档,里面有详细的解释。??? 1.postgresql中,所有数据库的对象都是用oid连接在一起的。??????? 这样子会造成我们在理解数据字典的时候有一些不知所措。下面介绍几个函数,可以简化很多的操作。名字引用描述regprocpg_proc函数名字regprocedurepg_proc带参数类型的函数regoperpg_operator操作符名regoperatorpg_operator带参数类型的操作符regclasspg_class关系名?????? 最常用的是regclass,关联数据字典的oid,使用方法如下:?aligputf8=# select 1259::regclass;?regclass———-?pg_class(1 row)aligputf8=# select oid,relname from pg_class where oid=’pg_class’::regclass;?oid? | relname?——+———-?1259 | pg_class(1 row)???????? 这样子就可以通过regclass寻找一个表的信息,就不用去关联 pg_class跟pg_namespace(记录schema信息)了。比较方便。??????? 同样的,其他几个类型也是一样的用法,如regproc(regprocedure)是跟pg_proc(保存普通函数的命令)关联的。regoper(regoperator)是跟pg_operator(操作符)的oid关联的。Eg:aligputf8=# select oid::regoper,oid::regoperator,oid,oprname from pg_operator limit 1;???? oid????? |??????? oid??????? | oid | oprname————–+——————-+—–+———?pg_catalog.= | =(integer,bigint) |? 15 | =(1 row)aligputf8=# select oid::regproc,oid::regprocedure,oid,proname from pg_proc limit 1;? oid?? |?????? oid?????? | oid? | proname——–+—————–+——+———?boolin | boolin(cstring) | 1242 | boolin(1 row)??????? 下面给给出如何使用regclass的例子。???2.获取表的字段信息。???????? 表名是放在pg_class,schema名是放在pg_namespace里面的,字段信息是放在pg_attribute里面的。一般是关联这三张表:???????? eg:????????SELECT a.attname,pg_catalog.format_type(a.atttypid, a.atttypmod) AS data_type??FROM??? pg_catalog.pg_attribute a,??????? (???????? SELECT? c.oid?????????? FROM??? pg_catalog.pg_class c??????????? LEFT JOIN pg_catalog.pg_namespace n??????????????? ON n.oid = c.relnamespace?????????? WHERE c.relname = ‘pg_class’??????????? AND n.nspname = ‘pg_catalog’???????? )b?WHERE a.attrelid = b.oid?AND a.attnum 0?AND NOT a.attisdropped ORDER BY a.attnum;?????????? 如果使用regclass就会简化很多:??????????????????????????????????SELECT a.attname,pg_catalog.format_type(a.atttypid, a.atttypmod) AS data_type??FROM??? pg_catalog.pg_attribute aWHERE a.attrelid =’pg_catalog.pg_class’::re
文档评论(0)