如何在postgres中成功显示通知

How to display Notice successfull in postgres

我想在我的 CMD 控制台中显示,只有在我的请求成功时才显示成功消息:

示例:

  BEGIN
  INSERT / UPDATE .... //request
  EXCEPTION
  WHEN successful_completion THEN RAISE NOTICE 'INFO : MESSAGE RESQUEST IS OK ';
  END;

这是我的代码编辑:

        DO $$ 
            BEGIN
                BEGIN
                    UPDATE user set age = 22 , date_inscription =  '2018-01-30' where id = 154;
                EXCEPTION
                WHEN ??? THEN ????
               END;
               RAISE NOTICE 'INFO : L''age  et date inscription ont été mis à jour';  // MESSAGE OK
            END;
            $$

没有消息successful_completion,但我想你知道。

  • 如果要发送错误通知,请将其放入异常处理程序中。

  • 如果您想发送成功通知,请将 RAISE 放在 相关 SQL 语句之后。

  • 如果无论如何都要发送通知,请将RAISE放在整个块之后。

第二个选项的示例:

BEGIN
   INSERT ...
   RAISE NOTICE 'INFO : MESSAGE REQUEST IS OK ';
EXCEPTION
   WHEN OTHERS THEN
      /* handle the error */
END;

如果你想在失败的情况下避免通知 INFO : MESSAGE REQUEST IS OK,你应该把它放在 INSERT 语句和 EXCEPTION 块之间,如下所示:

CREATE OR REPLACE FUNCTION test_notice (int_id INTEGER) RETURNS integer AS
$do$
BEGIN
   INSERT INTO tbl VALUES (int_id);
   RAISE NOTICE 'INFO : MESSAGE REQUEST IS OK ';
   RETURN 0;
EXCEPTION
   WHEN OTHERS THEN
      RAISE NOTICE 'Ignoring error';
      RETURN 1;
END;
$do$ LANGUAGE plpgsql;

这是 tbl table:

的 DDL
DROP TABLE IF EXISTS tbl;
CREATE TABLE tbl (id int);
ALTER TABLE tbl ADD CONSTRAINT tbl_pk PRIMARY KEY (id);

这是一个测试用例,1 次成功,1 次失败,然后 1 次成功:

()=#SELECT test_notice (1);
NOTICE:  INFO : MESSAGE REQUEST IS OK 
test_notice 
-------------
          0
(1 row)

()=#SELECT test_notice (1);
NOTICE:  Ignoring error
test_notice 
-------------
          1
(1 row)

()=#SELECT test_notice (2);
NOTICE:  INFO : MESSAGE REQUEST IS OK 
test_notice 
-------------
          0
(1 row)

如果您坚持实际检查,除了从已处理的集合中检索行之外,还有 2 种其他方法可用。首先,如果处理了一行,Insert 和 Update 都将 FOUND 设置为 True,否则设置为 False。另一个是通过Get Diagnostics获取实际处理的行数。以下块演示了两者。

do $$
   declare rows_processed integer; 
begin 
   insert into users(id, age, date_inscription)
          values  (154, 20, now()::date)
               ,  (164, 22, now()::date);
   get diagnostics rows_processed = row_count;
   raise notice '1. After Insert: Found=%, Num of Rows=%', found, rows_processed;

   UPDATE users 
      set age = age+2 , date_inscription = now()::date
    where id  in (154, 160) ;  -- one of two
   get diagnostics rows_processed = row_count;    
   raise notice '2. After Update: Found=%, Num of Rows=%', found, rows_processed;

   UPDATE users 
      set age = 12 , 
      date_inscription =  now()::date
      where id = 205;
   get diagnostics rows_processed = row_count;      
   raise notice '3. After Update (no such id): Found=%, Num of Rows=%', found, rows_processed;

   delete from users;
   get diagnostics rows_processed = row_count;      
   raise notice '4. After Delete: Found=%, Num of Rows=%', found, rows_processed;   
end;
$$;