Есть ли способ удалить префикс «plpy.Error:» из исключения, вызванного с помощью «plpy.error»? - PullRequest
0 голосов
/ 06 ноября 2019

В функции PL / pgSQL RAISE EXCEPTION 'mymessage' USING ...; будет иметь «mymessage» в качестве сообщения об ошибке, но в функции PL / Python, plpy.error('mymessage', ...) будет иметь «plpy.Error:mymessage » как сообщение об ошибке. Есть ли простой способ удалить этот префикс из сообщения об ошибке?

1 Ответ

1 голос
/ 06 ноября 2019

Боюсь, так что вы все равно не сможете это изменить. Это по замыслу. У него немного другая семантика. Внутри plpgsql вы можете вызвать прямое исключение PostgreSQL. Это невозможно в Python - исключение pypy plpy.Error вызывается, перехватывается и преобразуется в исключения PostgreSQL - «plpy.Error» - это имя исключения. Может быть любое имя любого другого исключения.

Соглашение об исключениях Python в этом случае - level: name: text

, которое вы можете увидеть

ERROR:  ZeroDivisionError: division by zero
ERROR:  plpy.Error: some text

, и естьнет возможности как это изменить. Это разработано - это соглашение.

PLpgSQL не имеет этого соглашения - но PLpgSQL гораздо более интегрирован с Postgres. У него нет собственной среды, есть свои исключения.

...