Перегляди інформаційної схеми та pg_typeof () повертають неповну інформацію про тип. З цих відповідей psql
дає найбільш точну інформацію про тип. (ОП може не потребувати такої точної інформації, але повинна знати обмеження.)
create domain test_domain as varchar(15);
create table test (
test_id test_domain,
test_vc varchar(15),
test_n numeric(15, 3),
big_n bigint,
ip_addr inet
);
Використовуючи psql
та \d public.test
правильно показує використання типу даних test_domain
, довжини стовпців varchar (n) та точності та шкали числових (p, s) стовпців.
пісочниця = # \ d public.test
Таблиця "public.test"
Стовпець | Тип | Модифікатори
--------- + ----------------------- + -----------
test_id | test_domain |
test_vc | характер варіюється (15) |
test_n | числовий (15,3) |
big_n | bigint |
ip_addr | inet |
Цей запит проти перегляду information_schema взагалі не показує використання test_domain
. Він також не повідомляє подробиці varchar (n) та числових (p, s) стовпців.
select column_name, data_type
from information_schema.columns
where table_catalog = 'sandbox'
and table_schema = 'public'
and table_name = 'test';
ім'я стовпця | тип даних
------------- + -------------------
test_id | характер різний
test_vc | характер різний
test_n | числовий
big_n | bigint
ip_addr | інет
Ви могли б бути в змозі отримати все цю інформацію шляху приєднання до іншого виду information_schema, або шляхом запиту системних таблиць безпосередньо. psql -E
може допомогти у цьому.
Функція pg_typeof()
коректно показує використання test_domain
, але не повідомляє про деталі стовпців varchar (n) та числових (p, s).
select pg_typeof(test_id) as test_id,
pg_typeof(test_vc) as test_vc,
pg_typeof(test_n) as test_n,
pg_typeof(big_n) as big_n,
pg_typeof(ip_addr) as ip_addr
from test;
test_id | test_vc | test_n | big_n | ip_addr
------------- + ------------------- + --------- + ------ - + ---------
test_domain | характер, що змінюється | числовий | bigint | інет