The error message for undefined names *inside functions* (not for undefined names on global level) has changed in Python 3.4 compared to 3.3. Particularly error string "NameError: global name 'nonsense' is not defined" has become "ERROR: NameError: name 'nonsense' is not defined" in Python 3.4. This patch also raises an exception, but the exceptin message is the same across Python versions. diff -up postgresql-9.3.4/src/pl/plpython/expected/plpython_do.out.python34 postgresql-9.3.4/src/pl/plpython/expected/plpython_do.out --- postgresql-9.3.4/src/pl/plpython/expected/plpython_do.out.python34 2014-05-23 15:42:50.462783074 +0200 +++ postgresql-9.3.4/src/pl/plpython/expected/plpython_do.out 2014-05-23 16:09:28.501654085 +0200 @@ -4,9 +4,9 @@ CONTEXT: PL/Python anonymous code block DO $$ plpy.notice("This is plpython2u.") $$ LANGUAGE plpython2u; NOTICE: This is plpython2u. CONTEXT: PL/Python anonymous code block -DO $$ nonsense $$ LANGUAGE plpythonu; -ERROR: NameError: global name 'nonsense' is not defined +DO $$ raise Exception("Sample error") $$ LANGUAGE plpythonu; +ERROR: Exception: Sample error CONTEXT: Traceback (most recent call last): PL/Python anonymous code block, line 1, in - nonsense + raise Exception("Sample error") PL/Python anonymous code block diff -up postgresql-9.3.4/src/pl/plpython/sql/plpython_do.sql.python34 postgresql-9.3.4/src/pl/plpython/sql/plpython_do.sql --- postgresql-9.3.4/src/pl/plpython/sql/plpython_do.sql.python34 2014-05-23 15:42:24.240756276 +0200 +++ postgresql-9.3.4/src/pl/plpython/sql/plpython_do.sql 2014-05-23 16:10:31.363475875 +0200 @@ -2,4 +2,4 @@ DO $$ plpy.notice("This is plpythonu.") DO $$ plpy.notice("This is plpython2u.") $$ LANGUAGE plpython2u; -DO $$ nonsense $$ LANGUAGE plpythonu; +DO $$ raise Exception("Sample error") $$ LANGUAGE plpythonu;