¿Es posible cambiar el nombre de los f1, f2, f3...
nombres predeterminados cuando se usa la row_to_json
función solo para algunas columnas?
puedo hacer
row_to_json(customers)
volviendo
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
Pero si solo quiero nombres sin id_customer
, tengo que usar
row_to_json(row(first_name, last_name))
y luego me sale
{"f1":"bla","f2":"second_bla"}
Y me gustaría obtener este resultado con los nombres de columna predeterminados o con el mío. Sé que puedo crear mi propio tipo compuesto y usar
row_to_json(row(first_name, last_name))::my_custom_type
pero, ¿no es posible hacerlo bien en la consulta sin crear ese tipo?
postgresql
boobiq
fuente
fuente
Respuestas:
Una expresión de tabla común le permite especificar alias explícitamente, no solo para el CTE sino también para sus columnas.
Esto es diferente al ejemplo de @ dezso en que no usa
col AS alias
para cada columna de unaSELECT
lista; alias los nombres de columna en el alias de la tabla CTE.He usado un
VALUES
expresión como subconsulta, pero puedes usarSELECT
lo que quieras; el punto es que cualquier alias de columna que se proporcione o se asuma en la subconsulta puede anularse en la definición de CTE especificando una lista de nombres de columna.Puede hacer lo mismo en una subconsulta, de nuevo en lugar de usar
AS alias
:Esto no funciona con una
ROW
expresión directamente; solo puedes lanzar unROW
tipo concreto, no puedes usar alias.fuente
hará lo que quiera sin ningún impacto en el rendimiento (y no es demasiado detallado):
fuente
Puedes hacer algo como esto:
(Por supuesto, lo mismo se puede lograr con
pero encontré el primero más legible).
En la
WITH
parte puedes construir filas de cualquier estructura sobre la marcha.fuente
Puedes usar
json_build_object
.fuente