Postgres通知:在表

问题描述

我想用发送了LISTE/NOTIFY的{​​{1}}创建trigger_function管道。

在我的NOTIFY中,我想获取表中具有行的任何NOTIFY的行id的消息。

我怎么写这样的通知create/delete/update

到目前为止,我有下一次迁移吗?女巫创建触发器而没有行trigger_function

id

解决方法

步骤如下:

  1. 创建表my_table
CREATE TABLE my_table(
id int,data varchar
)
  1. 然后写Trigger Procedure
CREATE OR REPLACE FUNCTION notify_my_table_update() RETURNS TRIGGER AS $$
    DECLARE
    row RECORD;
    output TEXT;
    
    BEGIN
    -- Checking the Operation Type
    IF (TG_OP = 'DELETE') THEN
      row = OLD;
    ELSE
      row = NEW;
    END IF;
    
    -- Forming the Output as notification. You can choose you own notification.
    output = 'OPERATION = ' || TG_OP || ' and ID = ' || row.id;
    
    -- Calling the pg_notify for my_table_update event with output as payload

    PERFORM pg_notify('my_table_update',output);
    
    -- Returning null because it is an after trigger.
    RETURN NULL;
    END;
$$ LANGUAGE plpgsql;
  1. 在表initial_cost_tasks上为INSERT / UPDATE / DELETE创建一个after触发器
CREATE TRIGGER trigger_my_table_update
  AFTER INSERT OR UPDATE OR DELETE
  ON my_table
  FOR EACH ROW
  EXECUTE PROCEDURE notify_my_table_update();
  -- We can not use TRUNCATE event in this trigger because it is not supported in case of FOR EACH ROW Trigger 
  1. 注册my_table_update频道以接收通知。
LISTEN my_table_update;
  1. 现在,您可以在会话中的PSQL提示符下接收通知。

插入操作

TEST=# INSERT into my_table VALUES (1,'TESTING');
INSERT 0 1
Asynchronous notification "my_table_update" with payload "OPERATION = INSERT and ID = 1" received from server process with PID 9057.

更新操作

TEST=# update my_table  set data='NOTIFY' where ID>=2;
UPDATE 2
Asynchronous notification "my_table_update" with payload "OPERATION = UPDATE and ID = 2" received from server process with PID 9057.
Asynchronous notification "my_table_update" with payload "OPERATION = UPDATE and ID = 3" received from server process with PID 9057.

删除操作

TEST=# delete from my_table ;
DELETE 3
Asynchronous notification "my_table_update" with payload "OPERATION = DELETE and ID = 1" received from server process with PID 9057.
Asynchronous notification "my_table_update" with payload "OPERATION = DELETE and ID = 2" received from server process with PID 9057.
Asynchronous notification "my_table_update" with payload "OPERATION = DELETE and ID = 3" received from server process with PID 9057.

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...