对表的所有列应用 MAX(LENGTH)
Posted
技术标签:
【中文标题】对表的所有列应用 MAX(LENGTH)【英文标题】:Apply MAX(LENGTH) on all columns of a table 【发布时间】: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 上运行它 【参考方案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 客户端显示查询的每个结果的行号(无论运行什么查询),这使得该技巧无法使用。幸运的是,我有另一个客户端运行良好以上是关于对表的所有列应用 MAX(LENGTH)的主要内容,如果未能解决你的问题,请参考以下文章