greenplum列出所有表并显示表的相关信息

本文介绍了一种查询Greenplum数据库中public模式下所有表的方法,包括表的DDL与DML最近操作记录、表占用的空间大小及行数等信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

列出greenplum中public下所有表,并显示最近的DDL与DML操作,以及显示表所占用空间大小以及表行数

select 
tables.*,
po.last_staactionname,
po.last_statime,
po1.first_staactionname,
po1.first_statime,
reltuples
from 
(select  
schemaname,SPLIT_PART(tablename, '_1', 1) as tablename,tableowner,tablespace,hasindexes,hasrules,hastriggers,
round(sum(pg_total_relation_size(schemaname||'.'||SPLIT_PART(tablename, '_1', 1)))/1024/1024,2) as  tablesize_KB
from pg_tables where schemaname in ('public')
 group by 1,2 ,3,4,5,6,7 order by tablesize_KB desc
)tables
left join 
(select objid,last_staactionname ,last_statime from (select objid,staactionname as last_staactionname,statime  as last_statime,
ROW_NUMBER()OVER(PARTITION by objid order by statime desc) as ind from pg_stat_last_operation where staactionname not in ('ANALYZE' ,'VACUUM','PRIVILEGE'))a where ind = 1) po
on tables.tablename::regclass = po.objid
left join
(select objid,first_staactionname ,first_statime  from (select objid,staactionname as first_staactionname,statime as first_statime,
ROW_NUMBER()OVER(PARTITION by objid order by statime) as ind from pg_stat_last_operation where staactionname not in ('ANALYZE' ,'VACUUM','PRIVILEGE'))a where ind = 1) po1
on tables.tablename::regclass = po1.objid
left join 
(SELECT SPLIT_PART(relname, '_1', 1) as relname, sum(reltuples) as reltuples
FROM pg_class r 
JOIN pg_namespace n
ON (relnamespace = n.oid)
WHERE relkind = 'r' AND n.nspname = 'public'
GROUP BY 1
)nsp 
on  tables.tablename = nsp.relname
;

<think>好的,用户现在问的是Greenplum如何通过元数据来识别是否存在。之前他们问过关于建和查询时名大小写的问题,现在可能是在进一步了解如何验证是否存在,或者是在调试之前的错误。我需要确保回答准确,同时关联到他们之前的经验。 首先,用户可能想知道在Greenplum中,有哪些系统或视图可以用来检查是否存在。他们可能遇到了问题,比如查询时出错,想通过元数据来确认是否存在,或者是在写脚本时需要自动检查是否存在。 我需要回忆Greenplum的元数据结构。Greenplum基于PostgreSQL,所以大部分系统和视图是一样的。常见的系统包括pg_class、pg_namespace、pg_tables、pg_views等。pg_class存储所有关系(、视图、索引等),pg_namespace存储schema信息,pg_tables和pg_views是视图,方便查询。 需要解释每个元数据的作用,比如pg_class中的relname和relnamespace,结合pg_namespace来获取schema名。还要提到信息模式(information_schema),因为这是SQL标准,用户可能更熟悉。例如information_schema.tables视图。 用户可能需要具体的SQL示例,所以给出几个查询例子会很实用。比如检查特定schema下的是否存在,或者跨所有schema查找。还要注意大小写的问题,因为Greenplum默认转换为小写,除非使用双引号,所以在查询时需要注意名称的大小写匹配。 另外,用户可能对权限问题不太清楚,需要提醒他们需要有权限访问这些系统,否则可能查不到结果。或者提到如果在特定的schema下,需要指定schema名,否则可能搜索不到。 最后,总结推荐的方法,比如使用pg_tables视图,因为它比较直观,或者信息模式,如果用户习惯标准SQL的话。可能还要提到\dt命令,如果他们在使用psql客户端的话,这也是快速检查的方法。 需要确保回答结构清晰,分点列出不同的元数据和视图,给出示例,说明注意事项,如大小写和权限。这样用户可以根据自己的情况选择适合的方法来检查是否存在。</think>在 Greenplum(基于 PostgreSQL)中,可以通过以下 **元数据/视图** 来识别是否存在: --- ### 一、核心系统 | 元数据对象 | 作用描述 | 关键字段说明 | |--------------------|--------------------------------------------------------------------------|-----------------------------------------------------------------------------| | `pg_class` | 存储所有数据库对象(、索引、视图等)的元数据 | `relname`: 对象名称<br>`relnamespace`: 所属schema的OID(对应`pg_namespace`)| | `pg_namespace` | 存储schema信息 | `nspname`: schema名称<br>`oid`: schema的唯一标识 | | `pg_tables` | 系统视图,直接展示所有信息(基于`pg_class`和`pg_namespace`的封装) | `schemaname`: schema名称<br>`tablename`: 名称 | | `pg_views` | 系统视图,展示所有视图信息 | 同上 | --- ### 二、信息模式(SQL标准) 通过 **`information_schema`** 中的标准化视图查询: ```sql -- 检查是否存在(跨schema查询) SELECT EXISTS ( SELECT 1 FROM information_schema.tables WHERE table_schema = 'my_dsj' AND table_name = 't_fkd_tmp' ); ``` --- ### 三、常用查询示例 #### 1. 精确匹配查询(推荐) ```sql -- 通过 pg_tables 视图查询(最直观) SELECT EXISTS ( SELECT 1 FROM pg_tables WHERE schemaname = 'my_dsj' AND tablename = 't_fkd_tmp' ); -- 通过 pg_class + pg_namespace 联合查询(更底层) SELECT EXISTS ( SELECT 1 FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'my_dsj' AND c.relname = 't_fkd_tmp' AND c.relkind = 'r' -- 限制为普通(非视图/索引等) ); ``` #### 2. 模糊搜索(跨schema查询) ```sql -- 查找所有schema中名为 t_fkd_tmp 的 SELECT schemaname, tablename FROM pg_tables WHERE tablename = 't_fkd_tmp'; ``` --- ### 四、注意事项 1. **大小写敏感性问题** - 若建时**未使用双引号**,名会被存储为全小写(如`T_FKD_TMP` ➔ `t_fkd_tmp`) - 查询时必须使用全小写名称匹配,除非建时使用双引号强制保留大小写 2. **权限控制** - 用户需要有`USAGE`权限访问目标schema - 需要`SELECT`权限访问`pg_catalog`系统 3. **分布式特性** Greenplum的元数据(如`pg_class`)在Coordinator节点统一管理,与Segment节点自动同步。 --- ### 五、扩展工具 在 `psql` 客户端中,可以直接使用快捷命令: ```sql \dt my_dsj.t_fkd_tmp -- 快速显示信息(存在时会返回描述) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值