É possível renomear f1, f2, f3...
nomes padrão ao usar a row_to_json
função apenas para algumas colunas?
eu posso fazer
row_to_json(customers)
retornando
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
Mas se eu quero apenas nomes sem id_customer
, tenho que usar
row_to_json(row(first_name, last_name))
e então eu recebo
{"f1":"bla","f2":"second_bla"}
E eu gostaria de obter esse resultado com nomes de colunas padrão ou com os meus. Eu sei que posso criar meu próprio tipo composto e usar
row_to_json(row(first_name, last_name))::my_custom_type
mas não é possível fazer isso corretamente na consulta sem criar esse tipo?
postgresql
boobiq
fonte
fonte
Respostas:
Uma expressão de tabela comum permite especificar aliases explicitamente, não apenas para o CTE, mas para suas colunas.
Isso é diferente do exemplo do @ dezso, pois ele não usa
col AS alias
para cada coluna em umaSELECT
lista; alias os nomes das colunas no alias da tabela CTE.Eu usei uma
VALUES
expressão como subconsulta, mas você pode usarSELECT
o que quiser; o ponto é que quaisquer aliases de coluna fornecidos ou assumidos na subconsulta podem ser substituídos na definição CTE, especificando uma lista de nomes de colunas.Você pode fazer o mesmo em uma subconsulta, novamente, em vez de usar
AS alias
:Isso não funciona
ROW
diretamente com uma expressão; você só pode converter aROW
em um tipo concreto, não pode usar o alias.fonte
fará o que você deseja sem nenhum impacto no desempenho (e não é muito detalhado):
fonte
Você pode fazer algo assim:
(Obviamente, o mesmo pode ser alcançado com
mas achei o primeiro mais legível.)
Na
WITH
parte, você pode construir linhas de qualquer estrutura em tempo real.fonte
Você pode usar
json_build_object
.fonte