Можно ли переименовать f1, f2, f3...
имена по умолчанию при использовании row_to_json
функции только для некоторых столбцов?
я могу сделать
row_to_json(customers)
возврате
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
Но если я хочу только имена без id_customer
, я должен использовать
row_to_json(row(first_name, last_name))
и тогда я получаю
{"f1":"bla","f2":"second_bla"}
И я хотел бы получить этот результат либо с именами столбцов по умолчанию, либо с моими собственными. Я знаю, что могу создать свой собственный составной тип и использовать
row_to_json(row(first_name, last_name))::my_custom_type
но разве невозможно сделать это правильно в запросе, не создавая этот тип?
postgresql
boobiq
источник
источник
Ответы:
Распространенное табличное выражение позволяет явно указывать псевдонимы не только для CTE, но и для его столбцов.
Это отличается от примера @ dezso тем, что он не используется
col AS alias
для каждого столбца вSELECT
списке; это псевдоним имен столбцов в псевдониме таблицы CTE.Я использовал
VALUES
выражение как подзапрос, но вы можете использоватьSELECT
все, что вам нравится; Дело в том, что любые псевдонимы столбцов, которые предоставляются или предполагаются в подзапросе, могут быть переопределены в определении CTE, указав имя столбца-списка.Вы можете сделать то же самое в подзапросе, снова вместо использования
AS alias
:Это не работает с
ROW
выражением напрямую; вы можете привести толькоROW
к конкретному типу, вы не можете использовать его псевдоним.источник
будет делать то, что вы хотите, без какого-либо влияния на производительность (и не слишком многословно):
источник
Вы можете сделать что-то вроде этого:
(Конечно, то же самое может быть достигнуто с
но я нашел первый более читабельным.)
В
WITH
части вы можете построить ряды любой структуры на лету.источник
Вы можете использовать
json_build_object
.источник