Как получить тип данных определенного поля из таблицы в postgres? Например, у меня есть следующая таблица student_details (целое число stu_id, varchar (30) stu_name, отметка времени join_date);
В этом случае, используя имя поля или любым другим способом, мне нужно получить тип данных конкретного поля. Есть ли возможность?
postgresql
Натан Вильяэскуса
источник
источник
Ответы:
Вы можете получить типы данных из information_schema (8.4 документов, на которые есть ссылка, но это не новая функция):
источник
where table_catalog = ? and table_schema = ? and table_name = ?;
Но это представление information_schema не учитывает, что DDL мог использовать домены .pg_typeof
Вы можете использовать функцию pg_typeof () , которая также хорошо работает для произвольных значений.
источник
SELECT pg_typeof( date_part( 'year', now() ) ) AS expr
вероятно, отличается от того, что вы ожидаете.pg_typeof
работает для полей, выходящих из хранимых процедур, для которых бэкэнд-таблица, если она вообще существует, неизвестна / неясна.select state, qstart, pg_typeof(qstart) as ty_qstart from listconn()
, Information_schema не очень поможет здесь.Попробуйте этот запрос:
источник
table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
беги
psql -E
а потом\d student_details
источник
Если вам нравится решение 'Mike Sherrill', но вы не хотите использовать psql, я использовал этот запрос, чтобы получить недостающую информацию:
с результатом:
источник
Представления информационной схемы и pg_typeof () возвращают неполную информацию о типе. Из этих ответов
psql
дает наиболее точную информацию о типе. (ОП может не нуждаться в такой точной информации, но должен знать ограничения.)Использование
psql
и\d public.test
правильно показывает использование типа данныхtest_domain
, длины столбцов varchar (n), а также точности и масштаба числовых столбцов (p, s).Этот запрос к представлению information_schema не показывает использование
test_domain
вообще. Он также не сообщает подробности о столбцах varchar (n) и numeric (p, s).Вы можете получить всю эту информацию, присоединившись к другим представлениям information_schema или запросив системные таблицы напрямую.
psql -E
может помочь с этим.Функция
pg_typeof()
правильно показывает использованиеtest_domain
, но не сообщает подробности о столбцах varchar (n) и numeric (p, s).источник
Извлечение типа данных из
information_schema
возможно, но не удобно (требуется объединение нескольких столбцов сcase
оператором). В качестве альтернативы можно использоватьformat_type
встроенную функцию, но она работает с внутренними идентификаторами типов, которые видны в,pg_attribute
но не вinformation_schema
. примерОсновано на https://gis.stackexchange.com/a/97834 .
источник
b.relfilenode
наb.oid