Как вставить ошибку в другую таблицу из функции в postgres? - PullRequest
0 голосов
/ 25 марта 2020

Я хочу понять, как правильно обрабатывать ошибки и перемещать их. Я хотел бы взять ошибку и сбросить эту ошибку в другую таблицу, которую я планирую сканировать позже. Как бы я go сделал это в приведенном ниже примере?

-----my main table
CREATE TABLE stage(test_date VARCHAR);

-----error table
CREATE TABLE errors (
error VARCHAR,
the_date timestamp
);

-----function that will handle insert and log error into errors table
CREATE OR REPLACE PROCEDURE example4 () AS $$
BEGIN
  INSERT INTO prd (test_date) VALUES ('hello');
  EXCEPTION
    WHEN OTHERS THEN
        RAISE NOTICE 'Insert failed with error code %', SQLSTATE;
        ---INSERT INTO errors table???
        ---Im imagining something like INSERT INTO errors (error, the_date) ...
END;
$$
LANGUAGE plpgsql;

1 Ответ

1 голос
/ 25 марта 2020

Найден и ответ с использованием функции из:

PG SQL Функция триггера Записать исключение в таблицу журнала

CREATE TABLE errors (id SERIAL, sql_state TEXT, message TEXT, detail TEXT, hint TEXT, context TEXT);

CREATE OR REPLACE FUNCTION example4()
    RETURNS VOID AS
$BODY$
DECLARE
    _sql_state TEXT;
    _message TEXT;
    _detail TEXT;
    _hint TEXT;
    _context TEXT;
BEGIN
    INSERT INTO prd (test_date) VALUES ('hello');
EXCEPTION
    WHEN OTHERS THEN
        GET STACKED DIAGNOSTICS
            _sql_state := RETURNED_SQLSTATE,
            _message := MESSAGE_TEXT,
            _detail := PG_EXCEPTION_DETAIL,
            _hint := PG_EXCEPTION_HINT,
            _context := PG_EXCEPTION_CONTEXT;

        INSERT INTO errors (sql_state, message, detail, hint, context)
        VALUES (_sql_state, _message, _detail, _hint, _context);
END
$BODY$
    LANGUAGE plpgsql;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...