如何在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;
$$;
我想在我的 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:
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;
$$;