我正在尝试对包含连接结果的子查询的结果使用字符串聚合。我想为Postgres中的数据库模式创建一个包含限定名称“schema.table”的长文本字符串。你知道怎么做吗?它说,下面是我提出的代码(不工作) 用作表达式的子查询返回的多行。
SELECT string_agg(
(SELECT CONCAT(table_schema, '.', table_name) table_schema_name
FROM information_schema.tables
WHERE table_schema = 'name_of_schema'), ' ')
FROM information_schema.tables
WHERE table_schema = 'name_of_schema'
我现在拥有的是:
| table_schema_name |
name_of_schema.table1
name_of_schema.table2
name_of_schema.table3
我想要达到的目标是:
| agrreagated field |
name_of_schema.table1 name_of_schema.table2 name_of_schema.table3
答案 0 :(得分:1)
此查询应该执行您要求的任务:
SELECT string_agg(CONCAT(table_schema, '.', table_name), ' ')
FROM information_schema.tables
WHERE table_schema = 'schema_name'
答案 1 :(得分:0)
您应该在外部选择中使用查询作为表格表达式:
SELECT string_agg(s.table_schema_name, ' ') FROM (
SELECT CONCAT(table_schema, '.', table_name) AS table_schema_name
FROM information_schema.tables
WHERE table_schema = 'public'
) s
或简单地避免子选择:
SELECT string_agg(CONCAT(table_schema, '.', table_name), ' ')
FROM information_schema.tables
WHERE table_schema = 'public';