Isso obviamente resulta:
SELECT *, uuid_generate_v4() FROM fruits;
apple |f6b9a8a5-31c9-4917-9649-f366b7c12492
orange |a55da08f-95a0-4f33-b536-866a3eae71e9
eu sei que eu poderia fazer
SELECT * FROM fruits LEFT OUTER JOIN uuid_generate_v4() ON TRUE;
Mas existe alguma maneira melhor de atribuir o mesmo uuid? Estou mais interessado no nível conceitual, a função uuid() é apenas um exemplo.
Então você quer ter certeza de que
uuid_generate_v4()
é chamado apenas uma vez.Sua solução é essencialmente fazer isso. Outras soluções variam apenas na sintaxe que está sendo usada.
Você pode usar uma expressão de tabela comum para expressar isso de alguma forma em sua consulta:
Como o CTE retorna apenas uma única linha, a junção cruzada não aumentará o número de linhas no resultado completo. Alternativamente, você pode usar uma junção cruzada "implícita" para torná-la mais curta:
Ou você pode remover o CTE e usar a chamada de função em uma tabela derivada: