aboutsummaryrefslogtreecommitdiff
path: root/src/pl/plpython/sql
diff options
context:
space:
mode:
authorMichael Paquier <michael@paquier.xyz>2023-09-19 08:31:06 +0900
committerMichael Paquier <michael@paquier.xyz>2023-09-19 08:31:06 +0900
commitaf5b3c3d1eae94e9584ad1955a20b5a7cd0083c1 (patch)
treeee74653bb50c0134fa94ad8c2de5f37fa13bdbd7 /src/pl/plpython/sql
parentc103d073819a2189d849c0a93d51c726be524c48 (diff)
downloadpostgresql-af5b3c3d1eae94e9584ad1955a20b5a7cd0083c1.tar.gz
postgresql-af5b3c3d1eae94e9584ad1955a20b5a7cd0083c1.zip
Fix assertion failure with PL/Python exceptions
PLy_elog() was not able to handle correctly cases where a SPI called failed, which would fill in a DETAIL string able to trigger an assertion. We may want to improve this infrastructure so as it is able to provide any extra detail information provided by an error stack, but this is left as a future improvement as it could impact existing error stacks and any applications that depend on them. For now, the assertion is removed and a regression test is added to cover the case of a failure with a detail string. This problem exists since 2bd78eb8d51c, so backpatch all the way down with tweaks to the regression tests output added where required. Author: Alexander Lakhin Discussion: https://postgr.es/m/18070-ab9c171cbf4ebb0f@postgresql.org Backpatch-through: 11
Diffstat (limited to 'src/pl/plpython/sql')
-rw-r--r--src/pl/plpython/sql/plpython_error.sql11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/pl/plpython/sql/plpython_error.sql b/src/pl/plpython/sql/plpython_error.sql
index 11f14ec5a7c..9bb1c0b085a 100644
--- a/src/pl/plpython/sql/plpython_error.sql
+++ b/src/pl/plpython/sql/plpython_error.sql
@@ -344,3 +344,14 @@ $$ LANGUAGE plpython3u;
\set SHOW_CONTEXT always
SELECT notice_outerfunc();
+
+/* test error logged with an underlying exception that includes a detail
+ * string (bug #18070).
+ */
+CREATE FUNCTION python_error_detail() RETURNS SETOF text AS $$
+ plan = plpy.prepare("SELECT to_date('xy', 'DD') d")
+ for row in plpy.cursor(plan):
+ yield row['d']
+$$ LANGUAGE plpython3u;
+
+SELECT python_error_detail();