powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Функция Format_type в RedShift
2 сообщений из 2, страница 1 из 1
Функция Format_type в RedShift
    #39285295
Sergey-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите куда обращается (в какие системные таблицы) и что делает функция format_type. Мне нужно обойтись в тексте скрипта без этой функции. Как это сделать?
...
Рейтинг: 0 / 0
Функция Format_type в RedShift
    #39285661
Sergey-ZZZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Отвечаю сам себе (может кому-то поможет). Написал вот такой "умный" скрипт для извлечения данных о таблицах и столбцах.
SELECT
c.relname AS Table_Name,
a.attname AS Column_Name,
CASE a.atttypid
WHEN 16 THEN 'BOOLEAN'
WHEN 17 THEN 'BYTEA'
WHEN 18 THEN 'CHAR1'
WHEN 19 THEN 'NAME'
WHEN 20 THEN 'BIGINT'
WHEN 21 THEN 'SMALLINT'
WHEN 22 THEN 'OIDVECTOR'
WHEN 23 THEN 'INTEGER'
WHEN 24 THEN 'REGPROC'
WHEN 25 THEN 'TEXT'
WHEN 26 THEN 'OID'
WHEN 27 THEN 'TID'
WHEN 28 THEN 'XID'
WHEN 30 THEN 'OIDVECTOR'
WHEN 700 THEN 'REAL'
WHEN 701 THEN 'DOUBLE'
WHEN 1005 THEN 'ARRAY'
WHEN 1009 THEN 'ARRAY'
WHEN 1042 THEN 'CHAR'
WHEN 1043 THEN 'VARCHAR'
WHEN 1082 THEN 'DATE'
WHEN 1114 THEN 'TIMESTAMP'
WHEN 1184 THEN 'TIMESTAMP'
WHEN 1186 THEN 'INTERVAL'
WHEN 1700 THEN 'NUMERIC'
WHEN 2277 THEN 'ANYARRAY'
END AS Data_Type,
CASE a.atttypid
WHEN 1043 THEN a.atttypmod - 4
ELSE NULL
END AS Char_Length,
CASE atttypid
WHEN 21 /*int2*/ THEN 16
WHEN 23 /*int4*/ THEN 32
WHEN 20 /*int8*/ THEN 64
WHEN 1700 /*numeric*/ THEN
CASE WHEN atttypmod = -1
THEN null
ELSE ((atttypmod - 4) >> 16) & 65535 -- calculate the precision
END
WHEN 700 /*float4*/ THEN 24 /*FLT_MANT_DIG*/
WHEN 701 /*float8*/ THEN 53 /*DBL_MANT_DIG*/
ELSE null
END AS Numeric_Precision,
CASE
WHEN atttypid IN (21, 23, 20) THEN 0
WHEN atttypid IN (1700) THEN
CASE
WHEN atttypmod = -1 THEN null
ELSE (atttypmod - 4) & 65535 -- calculate the scale
END
ELSE null
END AS Numeric_Scale
FROM pg_namespace n
INNER JOIN pg_class c
ON n.oid = c.relnamespace
INNER JOIN pg_attribute a
ON c.oid = a.attrelid
WHERE a.attnum > 0
AND NOT a.attisdropped

Оказалось что числа для atttypid всегда постоянны.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Другие СУБД [игнор отключен] [закрыт для гостей] / Функция Format_type в RedShift
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]