给定一个表
mytestdb=# select * from foo;
id | name
----+------
4 | Tim
(1 row)
select foo from foo
输出什么,即select
与from
相同的表意味着什么?谢谢
mytestdb=# select foo from foo;
foo
---------
(4,Tim)
(1 row)
谢谢。
我的问题来自于理解中json_agg()
的输入是什么
mytestdb=# select json_agg(foo) from foo;
json_agg
-------------------------
[{"id":4,"name":"Tim"}]
(1 row)
请参阅http://johnatten.com/2015/04/22/use-postgres-json-type-and-aggregate-functions-to-map-relational-data-to-json/
在选择列表中使用表名或别名会生成表当前行的复合值。将表名或别名传递给可以接受复合值的函数将为每一行调用该函数。
构造
SELECT foo FROM foo;
在PostgreSQL中被称为整行引用,因为它将整行作为一个整体检索。
如果您知道每个CREATE TABLE
都有一个隐式CREATE TYPE
,它定义了一个与表同名的复合类型,那么事情就会变得更清楚。
通过查询目录,您可以很容易地看到:
SELECT typname, typtype, typinput, typoutput
FROM pg_type
WHERE typname = 'text';
因此,上面查询的结果是类型为foo
的单个项目。由于它是一种复合类型,因此用行表示法表示:用括号括起来,属性值用逗号分隔。