powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение сложного типа колонки
5 сообщений из 5, страница 1 из 1
Получение сложного типа колонки
    #39207296
DayGaykin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, конструктивно:

Таблица:
Код: sql
1.
2.
3.
CREATE TABLE foo (
	price_detail NUMERIC(14,2)[]
);



Как получить тип колонки полностью вместе с размером числа (14,2)?
Разные IDE это как-то делают.

Я пробовал извлекать из таблицы information_schema.columns и information_schema.element_types:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT
  col.*, '|||', e.*
FROM information_schema.columns col
  LEFT JOIN information_schema.element_types e
    ON ((col.table_catalog, col.table_schema, col.table_name, 'TABLE', col.dtd_identifier)
        = (e.object_catalog, e.object_schema, e.object_name, e.object_type, e.collection_type_identifier))
WHERE
  col.column_name = 'price_detail'
ORDER BY col.table_name, col.ordinal_position


Но, ни в одной возвращаемой колонке нет информации о размерности (14,2).


Получилось только извлечением метаданных из запроса:
Код: sql
1.
SELECT price_detail FROM foo LIMIT 0


Но способ так себе. К тому же мне бы хотелось одним запросом получить типы всех колонок всех таблиц.

Спасибо за помощь.
...
Рейтинг: 0 / 0
Получение сложного типа колонки
    #39207348
big-trot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DayGaykin,

select * from pg_attribute
...
Рейтинг: 0 / 0
Получение сложного типа колонки
    #39207353
DayGaykin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-trot,
Похоже что так и есть. Разбираюсь. Спасибо.
...
Рейтинг: 0 / 0
Получение сложного типа колонки
    #39207389
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DayGaykin,


Код: sql
1.
 format_type(atttypid,atttypmod)
...
Рейтинг: 0 / 0
Получение сложного типа колонки
    #39207395
DayGaykin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Точно!


Я пошел по простому пути. С помощью WireShark-а получил запрос, которым получает данные pgAdmin и разобрался в нем.
В итоге получилось (вдруг кто-то найдет тему в сети):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT
  c.relname,
  att.attname,
  format_type(ty.oid,att.atttypmod) AS displaytypname,
  des.description,
  pg_catalog.pg_get_expr(def.adbin, def.adrelid) AS defval,
  att.attnotnull,
  att.attinhcount,
  att.attnum
FROM pg_attribute att
  JOIN pg_type ty ON ty.oid=atttypid
  LEFT OUTER JOIN pg_attrdef def ON adrelid=att.attrelid AND adnum=att.attnum
  LEFT OUTER JOIN pg_description des ON (des.objoid=att.attrelid AND des.objsubid=att.attnum AND des.classoid='pg_class'::regclass)
  LEFT JOIN pg_class c ON c.oid = att.attrelid
WHERE att.attnum > 0
      AND att.attisdropped IS FALSE
      AND c.relkind = 'r'
      AND c.relnamespace = (SELECT nc.oid FROM pg_namespace nc WHERE nc.nspname = 'jp')
ORDER BY c.relname, att.attnum;



Всем спасибо за помощь!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Получение сложного типа колонки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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