Применить МАКС (ДЛИНА) ко всем столбцам таблицы - PullRequest
0 голосов
/ 15 апреля 2019

Я хочу проверить MAX(LENGTH) всех VARCHAR столбцов моей таблицы Redshift, поэтому у меня есть идея лучшего ограничения, которое я мог бы наложить на размеры столбцов. (Прямо сейчас все столбцы VARCHAR(65535))

Я могу написать запрос как:

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

Но разве нет способа, которым я мог бы написать свой запрос, чтобы он в основном гласил «применить это для каждого столбца»? Я попробовал ответ из этого поста , но, похоже, он применим только к классическому PostgreSQL

1 Ответ

1 голос
/ 15 апреля 2019

Вы можете использовать следующий 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, чтобы получить все максимальные длины из вашей таблицы

Пожалуйста, дайте мне знать, если это вам поможет.

...