Как найти максимальную длину поля данных в конкретном столбце таблицы и для всех таблиц в схеме - PullRequest
0 голосов
/ 02 апреля 2020

Добрый вечер У нас есть несколько таблиц в нескольких схемах в БД. мы пытаемся выяснить максимальный размер каждого столбца в таблице для всех таблиц и для всех схем.

Примеры имен столбцов: a, b, c, d, e, f, g Примеры имен схем : A, B, C, D

Ожидаемый результат: column_name Max_size_of_column

или column_name Max_size_of_column column_table table_schema

Я пробовал приведенный ниже запрос, но не смог получить желаемый вывод.

SELECT (select column_name from INFORMATION_SCHEMA.COLUMNS
where table_name='building'), 
select max(length(select column_name from INFORMATION_SCHEMA.COLUMNS 
where table_name='building')) from from INFORMATION_SCHEMA.COLUMNS 
where table_name='building'
group by column_name;

Пожалуйста, помогите нам получить желаемый вывод. Спасибо

1 Ответ

0 голосов
/ 03 апреля 2020

Вам нужны какие-то динамические c SQL для подобных вопросов. Но в Postgres это может быть сделано без необходимости использования функции PL / pg SQL, аналогично подходу из этого ответа , но с комбинированием max () и length ():

with all_lengths as (
  select table_schema, table_name, column_name,
         query_to_xml(format('select max(length(%I)) from %I.%I', column_name, table_schema, table_name), false, true, '') as xml_max
  from information_schema.columns
  where table_schema in ('public') -- add the schemas you want here
    and data_type in ('text', 'character varying')
)
select table_schema, table_name, column_name, 
       (xpath('/row/max/text()', xml_max))[1]::text::int as max_length
from all_lengths
;

У меня нет Postgres 9.5, но я думаю, что это должно работать и с этой старой версией.

Если вы просто хотите указать c столбцы, а не все столбцы с текст или тип varchar, затем просто измените условие and data_type in (..) на and column_name in (...) внутри CTE

...