当仅对某些列使用row_to_json函数时,是否可以重命名默认的f1,f2,f3 …名称?
我可以
row_to_json(客户)
回国
{ “id_customer”:2 “如first_name”: “BLA”,“姓氏”: “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
但是如果不创建该类型,是不是可以在查询中正确执行?
公用表表达式允许您明确指定别名,不仅适用于CTE,还适用于其列.
WITH data(col1,col2,cola,colb) AS ( VALUES (1,2,'fred','bob') ) SELECT row_to_json(data) FROM data;
这与@dezso的例子不同,因为它不对SELECT列表中的每个col使用col AS别名;它将CTE表别名中的列名称别名.
我使用VALUES表达式作为子查询,但你可以随意使用SELECT;关键是,无论在子查询中提供或假设的列别名,都可以通过指定列名列表在CTE定义中覆盖.
您可以在子查询中执行相同的操作,而不是使用AS别名:
SELECT row_to_json(data) FROM (VALUES (1,'bob')) data(col1,colb);
这不能直接与ROW表达式一起使用;你只能将ROW转换为具体类型,你不能为它做别名.
regress=> SELECT ROW(1,'bob') AS x(a,b,c,d); ERROR: Syntax error at or near "(" LINE 1: SELECT ROW(1,d);