A consulta a seguir parece funcionar, mas não tenho certeza se é a melhor/sempre correta forma:
select
parameter_name,
CASE WHEN data_type='ARRAY'
THEN SUBSTRING(udt_name, 2)||'[]'
ELSE data_type
END AS data_type
from information_schema.parameters
where specific_schema='my_schema'
and parameter_mode='IN'
and specific_name like 'my_proc_16831'
order by ordinal_position
De qualquer forma, parece meio hacky para mim. Existe uma maneira melhor de recuperar, por exemplo, numeric[] como um tipo se meu parâmetro for uma matriz de numeric?
Eu acho que você quer
format_type(typid oid, typmod integer)
.Dado:
Você pode obter detalhes do processo com:
... embora isso remova a portabilidade de usar
information_schema
, já que você está contando com o comportamento específico do Pg. Ele também assume que o tipomod é sempre -1 porque o PostgreSQL não acompanha o tipomod para funções - por exemplonumeric(18,2)
, torna-se apenasnumeric
como um argumento de função.Pelo menos dessa forma, você não precisa usar seu
LIKE
hack, ou confiar em suposições mutáveis sobre nomes de tipos internos de matriz.BTW, você pode usar
pg_proc
epg_type
diretamente em seu lugar. Isso pode valer a pena se o desempenho for crítico, embora, caso contrárioinformation_schema
, seja mais portátil entre versões.Isso lhe dá o equivalente: