Est-il possible de renommer les f1, f2, f3...
noms par défaut lorsque vous n'utilisez la row_to_json
fonction que pour certaines colonnes?
Je peux faire
row_to_json(customers)
de retour
{"id_customer":2,"first_name":"bla","last_name":"second_bla"}
Mais si je veux seulement des noms sans id_customer
, je dois utiliser
row_to_json(row(first_name, last_name))
et je reçois
{"f1":"bla","f2":"second_bla"}
Et je voudrais obtenir ce résultat avec les noms de colonnes par défaut ou les miens. Je sais que je peux créer mon propre type composite et l'utiliser
row_to_json(row(first_name, last_name))::my_custom_type
mais n'est-il pas possible de le faire directement dans la requête sans créer ce type?
postgresql
boobiq
la source
la source
Réponses:
Une expression de table commune vous permet de spécifier explicitement des alias, non seulement pour le CTE mais pour ses colonnes.
Ceci est différent de l'exemple de @ dezso en ce qu'il n'utilise pas
col AS alias
pour chaque col d'uneSELECT
liste; il alias les noms de colonne dans l'alias de table CTE.J'ai utilisé une
VALUES
expression comme sous-requête, mais vous pouvez utiliser ceSELECT
que vous voulez; le fait est que les alias de colonne fournis ou supposés dans la sous-requête peuvent être remplacés dans la définition CTE en spécifiant une liste de noms de colonnes.Vous pouvez faire la même chose dans une sous-requête, à nouveau au lieu d'utiliser
AS alias
:Cela ne fonctionne pas
ROW
directement avec une expression; vous pouvez uniquement convertir unROW
en un type concret, vous ne pouvez pas l'aliaser.la source
fera ce que vous voulez sans aucun impact sur les performances (et n'est pas trop verbeux):
la source
Vous pouvez faire quelque chose comme ça:
(Bien sûr, la même chose peut être obtenue avec
mais j'ai trouvé l'ancien plus lisible.)
Dans la
WITH
partie, vous pouvez construire des lignes de n'importe quelle structure à la volée.la source
Vous pouvez utiliser
json_build_object
.la source