首页 > 解决方案 > PostgreSQL - 将记录插入表并返回结果

问题描述

以下代码片段

SELECT data.generate_file_data(
   p.file_name,
   p.reference,
   p.extension,
   p.platform,
   p.library,
   p.path,
   p.is_temporary
) x
FROM files.main p;

返回一列名为 generate_file_data 的记录,如下所示

generate_file_data record
(reference, directory, platform, library)
(reference, directory, platform, library)
(reference, directory, platform, library)
(reference, directory, platform, library)
...

结果( generate_file_data() 函数的返回类型)是类型的记录

id integer          directory text        platform text         library text
id                  directory             platform              library

它总是返回一个结果。我想知道是否有一种方法可以将记录分成四部分并将它们放入

TABLE(id text, directory text, platform text, library text)

所以结果将是一个表而不是一列记录,有点像这样

id integer          directory text        platform text         library text
id                  directory             platform              library
id                  directory             platform              library
id                  directory             platform              library
id                  directory             platform              library
...

标签: sqlstringpostgresqlsql-function

解决方案


感谢@GMB,他几乎得到了正确的答案,似乎 CROSS JOIN LATERAL 允许我们为每一行调用 generate_file_data() 函数的结果并将它们粘合在一起

SELECT x.id, x.directory, x.library, x.platform
FROM files.main p
CROSS JOIN LATERAL data.generate_file_data(
   p.file_name,
   p.reference,
   p.extension,
   p.platform,
   p.library,
   p.path,
   p.is_temporary
) x;

之后我们在 SELECT 中指定我们想要返回哪些列!


推荐阅读