PostgreSQL 在 data_type 设置为 ARRAY 时确定列类型

Joh*_*ohn 2 postgresql postgresql-9.3

我遇到了一个奇怪的地方,PostgreSQL在表中设置了data_typeto 。我做了以下查询以获得一些见解:ARRAYinformation_schema.columns

SELECT * FROM information_schema.columns 
WHERE table_schema NOT IN ('pg_catalog', 'information_schema') 
AND table_name='__table_name__';
Run Code Online (Sandbox Code Playgroud)

我注意到了该udt_name列,想知道它是否是确定该列数据是什么类型的数组的可靠方法?

SELECT column_name, data_type, udt_name FROM information_schema.columns 
WHERE table_schema NOT IN ('pg_catalog', 'information_schema') 
AND table_name='__table_name__';
Run Code Online (Sandbox Code Playgroud)

a_h*_*ame 5

一种选择是简单地转换udt_name为 a regtype

SELECT column_name, data_type, udt_name::regtype
FROM information_schema.columns 
WHERE table_schema = 'public'
  AND table_name='table_name';
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用 function format_type(),但这需要oid数据类型的 :

select c.attname, pg_catalog.format_type(c.atttypid, NULL) as data_type
from pg_attribute c
  join pg_class t on c.attrelid = t.oid
  join pg_namespace n on t.relnamespace = n.oid
where t.relname = 'table_name'  -- your table name
  and n.nspname = 'public' -- table schema
  and c.attnum >= 0 -- exclude internal columns
Run Code Online (Sandbox Code Playgroud)