在PostgreSQL中返回插入的行

Dus*_*sty 16 postgresql

我目前正在开发一个报告生成servlet,它可以聚合来自多个表的信息并生成报告.除了返回结果行之外,我还将它们存储到报告表中,以便以后不需要重新生成它们,并且如果从中抽取它们的表将被擦除,它们将保持不变.为了做后者,我有一个表单的声明(注意:x是外部生成的,实际上是这个语句中的常量):

INSERT INTO reports
   (report_id, col_a, col_b, col_c)
SELECT x as report_id, foo.a, bar.b, bar.c
FROM foo, bar
Run Code Online (Sandbox Code Playgroud)

这工作正常,但我需要第二个查询来实际返回结果行,例如

SELECT col_a, col_b, col_c
FROM reports
WHERE report_id = x
Run Code Online (Sandbox Code Playgroud)

这工作正常,因为它只涉及单个表,不应该是昂贵的,但似乎我应该能够直接返回插入的结果,避免第二个查询.有没有一些语法可以做到这一点,我找不到?(我应该注意,我在数据库工作方面相当新,所以如果正确答案只是运行第二个查询,因为它只是稍微慢一些,所以就这样吧)

Mat*_*ood 26

在版本> = 8.2的PostgreSQL中,您可以使用此构造:

INSERT INTO reports (report_id, col_a, col_b, col_c)
SELECT x as report_id, foo.a, bar.b, bar.c
FROM foo, bar
RETURNING col_a, col_b, col_c
Run Code Online (Sandbox Code Playgroud)


dma*_*man 10

或者没有选择:

INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
   RETURNING did;
Run Code Online (Sandbox Code Playgroud)

文件

  • 我相信Op要求返回整行,这将是'RETURNING*;` (11认同)