Eu segui o exemplo do docu que correu bem:
select * from json_populate_record(null::x, '{"a":1,"b":2}')
Mas meu JSON autoconstruído simplificado semelhante a este não funcionou :-(
-- p_some_num of type int
select * from json_populate_record( null:my_record_type, '{"a":'||p_some_num||'',"b":2}' )
resultando em:
ERROR: function json_populate_record(my_record_type, text) does not exist
Eu deveria ter lido com mais cuidado e não estava ciente do implícito
text
parajson
conversão no exemplo . Depois de brincar com o que estava errado, é claro que o seguinte funciona:Andreas Dietrich respondeu sua pergunta, vou ser um pouco mais específico com o exemplo. Você pode encontrar a resposta aqui .
De acordo com a documentação, o tipo de base ou registro é referido a partir de um Tipo ou de uma Tabela. Usando o qual pode determinar o mapeamento da coluna.
Tipo é um tipo de dados definido pelo usuário. Você pode encontrar informações sobre uma construção Type aqui .
tldr;
para que funcione, você deve criar uma tabela como esta.
ou um tipo como este.
Em seguida, execute a consulta.