微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

导致 Pg_Relation_Size 混乱的模式大写

如何解决导致 Pg_Relation_Size 混乱的模式大写

首先,感谢您未来的任何帮助!

关于我的问题:我正在尝试获取 Greenplum 数据库中所有表的大小 - 简单。但是,有很多分区表,我想要它们的总大小,而不是独立的子大小。所以我使用以下查询来做到这一点:

select * from (
select schemaname as "Schema Name",tablename as "Table Name",cast(pg_relation_size(schemaname||'.'||tablename) as bigint ) / 1024 / 1024 as "Table Size (MB)"
from pg_tables
where schemaname||'.'||tablename not in (select schemaname||'.'||partitiontablename from pg_partitions)
and schemaname||'.'||tablename not in (select distinct schemaname||'.'||tablename from pg_partitions )

union all

select schemaname as "Schema Name",cast(sum(pg_relation_size(schemaname||'.'||partitiontablename)) as bigint ) / 1024 / 1024 as "Table Size (MB)"
from pg_partitions
group by 1,2
) as union_join
where "Table Size (MB)" > '50'
order by 3 desc
;

但是,它不断抛出错误,说“模式 xyz 不存在”。而且...是的,它没有...所以我提取了以下代码添加到 where 子句中,然后让它运行:

select schemaname,tablename,cast(sum(pg_relation_size(schemaname||'.'||partitiontablename)) as bigint ) / 1024 / 1024 as "Table Size (MB)"
from pg_partitions
where schemaname != 'XYZ'
group by 1,2
limit 1
;

这有效!!如果我将代码更改为仅包含“XYZ”,则会抛出与之前相同的错误,说“模式 xyz 不存在”。然后我们去...

现在我希望它为所有模式运行,所以我不能只排除 XYZ(遗憾的是,有大写的倍数)。我假设错误与以下部分有关:

pg_relation_size(schemaname||'.'||partitiontablename)

但老实说,我无法弄清楚为什么,或者即使是这一点。除了使用大写字母(双引号,yada yada)的基本知识之外,谷歌搜索没有产生任何结果,我现在正用头撞墙慢慢地失去理智......

非常感谢任何和所有帮助。

解决方法

尝试正确转义标识符:

select * from data1 where trim(buyer) like 'Pete Hansen';

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。