C'è un molto più semplice modo in PostgreSQL per ottenere il tipo di una colonna.
SELECT pg_typeof(col)::text FROM tbl LIMIT 1
Il tavolo deve contenere almeno una riga, ovviamente. E ottieni solo il tipo base senza modificatori di tipo (se presenti). Usa l'alternativa qui sotto se ne hai bisogno anche tu.
Puoi usare la funzione anche per le costanti. Il manuale su pg_typeof()
.
Per una tabella vuota (o qualsiasi) puoi utilizzare query nel catalogo di sistema pg_attribute
per ottenere l'elenco completo delle colonne e il rispettivo tipo in ordine:
SELECT attnum, attname AS column, format_type(atttypid, atttypmod) AS type
FROM pg_attribute
WHERE attrelid = 'myschema.mytbl'::regclass -- optionally schema-qualified
AND NOT attisdropped
AND attnum > 0
ORDER BY attnum;
Il manuale su format_type()
e su tipi di identificatori di oggetto
come regclass
.