繁体   English   中英

如何根据以前的查询插入新记录

[英]How to Insert a New Record Based on Previous Query

我需要更新表(统计信息)中的某些列,如果失败或成功(无论结果是什么),则在表(通知)中创建一条新记录,而无需在第一个和第二个查询之间使用分号 (;)

*第一次查询:*

UPDATE stats SET delivered = delivered + 1 WHERE id = 1

*第二次查询:*

INSERT INTO notifications (text) VALUES ('table stats updated')

(上面的示例不起作用。)

请注意

  • 我不能使用过程、函数或触发器,只能使用简单的查询。
  • 我不能在两个查询之间使用分号 (;)。
  • 需要先执行更新查询。

我已经尝试了一些没有结果的查询,例如

UPDATE stats SET delivered = delivered + 1 WHERE id = 
     (INSERT INTO notifications (text) VALUES ('table stats  updated') RETURNING id)

如果您希望在单个事务语句中执行所有命令,则可以使用多个 WITH 在单个事务中执行多个命令:

WITH query1 AS (
UPDATE stats SET delivered = delivered + 1 WHERE id = 1 RETURNING delivered
),
query2 AS (
    INSERT INTO notifications (text) 
    SELECT  delivered FROM query1 RETURNING id 
)
SELECT * FROM query1 , query2 ;

规则示例:

CREATE RULE rul_delivered_insertnotification AS ON UPDATE 
     TO delivered WHERE true
     DO (
     INSERT INTO notifications (notification) VALUES (NEW.delivered) ;
     ) ;
     CREATE RULE rul_notification_deliverednotification AS ON INSERT 
     TO notifications WHERE true
     DO (
     SELECT NEW.notification ;
     );

下面的交付更新将 go 插入到通知中,然后通知将检索插入字段通知的 select。

有规则返回的表,第二张图片没有规则:

在此处输入图像描述 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM