【问题标题】:Apply MAX(LENGTH) on all columns of a table对表的所有列应用 MAX(LENGTH)
【发布时间】:2019-04-15 15:11:58
【问题描述】:

我想检查我的 Redshift 表的所有 VARCHAR 列中的 MAX(LENGTH),因此我知道可以对列大小进行更好的限制。 (目前所有列都是VARCHAR(65535)

我可以编写如下查询:

SELECT MAX(LENGTH(col1)), MAX(LENGTH(col2)), ...
FROM my_table

但是有没有一种方法可以编写我的查询,所以它基本上说“对每一列都应用这个”?我已经尝试过post 的答案,但它似乎只适用于经典 PostgreSQL

【问题讨论】:

  • 你是对的,在 redshift 中没有办法做到这一点 - 你会在其他地方生成,然后在 redshift 上运行它

标签: amazon-redshift


【解决方案1】:

您可以使用以下 SQL 生成您的选择

select sql from (
select 1 o, 'select ' sql
union
select 2, 'max(length('+attname+')),'
from pg_class c
join pg_attribute a on c.oid = a.attrelid 
where relname = '<your_table>'
and attnum > 0
union 
select 3, 'from <your_table>'
)
order by o

输出将如下所示

select 
max(length(col1)),
max(length(col2)),
...
max(length(coln)),   -- <- remove the last comma
from <your_table>

您可以运行此 sql 以从您的表中获取所有最大长度

如果这对您有帮助,请告诉我。

【讨论】:

  • 不错的技巧,但行号出现在某些 SQL 客户端中:1 select 2 max(length(col1)), 3 max(length(col2)), 4 max(length(col3)), ...
  • 我已经添加了那些以正确顺序构造 sql,您只能运行删除 2 的中间部分以创建列列表并将“select”和“from..”添加到输出。如果这回答了您的问题,您能否将其标记为正确,谢谢!
  • 我的意思是我的 SQL 客户端显示查询的每个结果的行号(无论运行什么查询),这使得该技巧无法使用。幸运的是,我有另一个客户端运行良好
猜你喜欢
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 2010-11-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多