在表格的所有列上应用MAX(LENGTH)

时间:2019-04-15 15:11:59

标签: amazon-redshift

我想检查Redshift表中所有MAX(LENGTH)列中的VARCHAR,所以我想到了可以限制列大小的更好限制。 (现在所有列均为VARCHAR(65535)

我可以编写如下查询:

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

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

1 个答案:

答案 0 :(得分: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从表中获取所有最大长度

请告诉我这是否对您有帮助。