Как я могу поймать исключения в функции postgresql? - PullRequest
0 голосов
/ 07 апреля 2020

Я инициализирую функции как часть конвейера ETL; однако одна из функций зависит от работы с определенной таблицей, которая еще не была создана к моменту инициализации этой функции.

Иллюстрация:

   CREATE OR REPLACE FUNCTION some_schema.my_func(parameter_1 BIGINT)
   RETURNS TEXT
    AS
    $$
    SELECT foo
    FROM non_existent_schema.non_existent_schema AS my_table  -- will cause error as this relation does not yet exist 
    WHERE my_table.bar = parameter_1
;
$$ LANGUAGE sql;

В разделе 42.6.8 документации (Ошибки перехвата) обсуждается обработка исключений, но с использованием BEGIN заявлений (я не уверен, где включить BEGIN или если это имеет отношение к моему делу).

Мой вопрос: как мне избежать этой ошибки, и если я хотел бы заставить замолчать это исключение , как правильно это сделать.

примечание: я новичок с написанием функций в Postgres.

1 Ответ

1 голос
/ 07 апреля 2020

Вы не можете сделать это в функции SQL, потому что SQL не имеет процедурного кода. Вам нужно использовать другой процедурный язык, например PL / pg SQL:

CREATE FUNCTION some_schema.my_func(parameter_1 BIGINT) RETURNS TEXT
LANGUAGE plpgsql AS
$$BEGIN
    RETURN (SELECT foo
            FROM non_existent_schema.non_existent_schema AS my_table
            WHERE my_table.bar = parameter_1);
EXCEPTION
    WHEN undefined_table THEN
        NULL;  -- ignore
END;$$;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...