Python 3.x versus PG 9.1 branch

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Python 3.x versus PG 9.1 branch
Дата
Msg-id 863.1452703567@sss.pgh.pa.us
обсуждение исходный текст
Ответы Re: Python 3.x versus PG 9.1 branch  (Noah Misch <noah@leadboat.com>)
Re: Python 3.x versus PG 9.1 branch  (Robert Haas <robertmhaas@gmail.com>)
Список pgsql-hackers
In view of our rather embarrassing failure to cover the back branches
with Python 3.5-related regression test adjustments, I think there is
a clear need for a buildfarm critter that's testing with Python 3.5,
and I've been working on setting one up.  It's passing at the moment
for 9.2 and up, but not for 9.1, because we've repeatedly not bothered
to back-port regression test fixes for newer Pythons into that branch.
I could just omit Python 3 coverage for that branch in the critter's
configuration, but I wonder exactly why things are that way.

For clarity, to cover 9.1 I think we'd need to back-patch some subset
of these commits:

f16d52269 ff2faeec5 d0765d50f 6bff0e7d9 527ea6684 8182ffde5
45d1f1e02 2cfb1c6f7

The precedent of not fixing 9.1 started with the last of these.

I haven't looked into the details of which changes would actually
apply to 9.1, I just searched for commits that touched the Python
regression tests.  We'd really only need enough changes to address
the regression failures I'm getting, which are attached below.

Or we could just blow it off on the grounds that 9.1 is not long
for this world anyhow.

Opinions anyone?

            regards, tom lane

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_do.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_do.out    Wed Jan 13 00:46:31 2016
***************
*** 2,8 ****
  NOTICE:  This is plpythonu.
  CONTEXT:  PL/Python anonymous code block
  DO $$ nonsense $$ LANGUAGE plpython3u;
! ERROR:  NameError: global name 'nonsense' is not defined
  CONTEXT:  Traceback (most recent call last):
    PL/Python anonymous code block, line 1, in <module>
      nonsense
--- 2,8 ----
  NOTICE:  This is plpythonu.
  CONTEXT:  PL/Python anonymous code block
  DO $$ nonsense $$ LANGUAGE plpython3u;
! ERROR:  NameError: name 'nonsense' is not defined
  CONTEXT:  Traceback (most recent call last):
    PL/Python anonymous code block, line 1, in <module>
      nonsense

======================================================================

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_import.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_import.out    Wed Jan 13 00:46:32 2016
***************
*** 51,57 ****
  -- import python modules
  --
  SELECT import_fail();
! NOTICE:  import socket failed -- No module named foosocket
  CONTEXT:  PL/Python function "import_fail"
      import_fail
  --------------------
--- 51,57 ----
  -- import python modules
  --
  SELECT import_fail();
! NOTICE:  import socket failed -- No module named 'foosocket'
  CONTEXT:  PL/Python function "import_fail"
      import_fail
  --------------------

======================================================================

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_params.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_params.out    Wed Jan 13 00:46:32 2016
***************
*** 37,46 ****
  SELECT test_param_names2(users) from users;
                             test_param_names2
  -----------------------------------------------------------------------
!  {'lname': 'doe', 'username': 'j_doe', 'userid': 1, 'fname': 'jane'}
!  {'lname': 'doe', 'username': 'johnd', 'userid': 2, 'fname': 'john'}
!  {'lname': 'doe', 'username': 'w_doe', 'userid': 3, 'fname': 'willem'}
!  {'lname': 'smith', 'username': 'slash', 'userid': 4, 'fname': 'rick'}
  (4 rows)

  SELECT test_param_names2(NULL);
--- 37,46 ----
  SELECT test_param_names2(users) from users;
                             test_param_names2
  -----------------------------------------------------------------------
!  {'userid': 1, 'username': 'j_doe', 'lname': 'doe', 'fname': 'jane'}
!  {'userid': 2, 'username': 'johnd', 'lname': 'doe', 'fname': 'john'}
!  {'userid': 3, 'username': 'w_doe', 'lname': 'doe', 'fname': 'willem'}
!  {'userid': 4, 'username': 'slash', 'lname': 'smith', 'fname': 'rick'}
  (4 rows)

  SELECT test_param_names2(NULL);

======================================================================

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_trigger.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_trigger.out    Wed Jan 13 00:46:32 2016
***************
*** 119,125 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_before
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
--- 119,125 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_before
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 139,145 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_after
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
--- 139,145 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_after
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 180,188 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_before
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 1, 'v': 'update'}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 180,188 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_before
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'update', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 200,208 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_after
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 1, 'v': 'update'}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 200,208 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig_after
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'update', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 243,249 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'update'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 243,249 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'update', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 263,269 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'update'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 263,269 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'update', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 311,317 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 2, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
--- 311,317 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'insert', 'i': 2}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[old] => None
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 332,340 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'i': 1, 'v': 'update'}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 332,340 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[name] => show_trigger_data_trig
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[new] => {'v': 'update', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
***************
*** 355,361 ****
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'i': 1, 'v': 'insert'}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"
--- 355,361 ----
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[new] => None
  CONTEXT:  PL/Python function "trigger_data"
! NOTICE:  TD[old] => {'v': 'insert', 'i': 1}
  CONTEXT:  PL/Python function "trigger_data"
  NOTICE:  TD[relid] => bogus:12345
  CONTEXT:  PL/Python function "trigger_data"

======================================================================

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_error.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_error.out    Wed Jan 13 00:46:32 2016
***************
*** 245,251 ****
  plpy.nonexistent
  $$ LANGUAGE plpython3u;
  SELECT toplevel_attribute_error();
! ERROR:  AttributeError: 'module' object has no attribute 'nonexistent'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "toplevel_attribute_error", line 2, in <module>
      plpy.nonexistent
--- 245,251 ----
  plpy.nonexistent
  $$ LANGUAGE plpython3u;
  SELECT toplevel_attribute_error();
! ERROR:  AttributeError: module 'plpy' has no attribute 'nonexistent'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "toplevel_attribute_error", line 2, in <module>
      plpy.nonexistent

======================================================================

*** /Users/tgl/pgsql/src/pl/plpython/./python3/expected/plpython_subtransaction.out    Wed Jan 13 00:46:31 2016
--- /Users/tgl/pgsql/src/pl/plpython/./python3/results/plpython_subtransaction.out    Wed Jan 13 00:46:32 2016
***************
*** 58,64 ****

  TRUNCATE subtransaction_tbl;
  SELECT subtransaction_test('Python');
! ERROR:  AttributeError: 'module' object has no attribute 'attribute_error'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "subtransaction_test", line 13, in <module>
      plpy.attribute_error
--- 58,64 ----

  TRUNCATE subtransaction_tbl;
  SELECT subtransaction_test('Python');
! ERROR:  AttributeError: module 'plpy' has no attribute 'attribute_error'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "subtransaction_test", line 13, in <module>
      plpy.attribute_error
***************
*** 110,116 ****

  TRUNCATE subtransaction_tbl;
  SELECT subtransaction_ctx_test('Python');
! ERROR:  AttributeError: 'module' object has no attribute 'attribute_error'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "subtransaction_ctx_test", line 8, in <module>
      plpy.attribute_error
--- 110,116 ----

  TRUNCATE subtransaction_tbl;
  SELECT subtransaction_ctx_test('Python');
! ERROR:  AttributeError: module 'plpy' has no attribute 'attribute_error'
  CONTEXT:  Traceback (most recent call last):
    PL/Python function "subtransaction_ctx_test", line 8, in <module>
      plpy.attribute_error

======================================================================


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Pavel Stehule
Дата:
Сообщение: Re: Fwd: [JDBC] Re: 9.4-1207 behaves differently with server side prepared statements compared to 9.2-1102
Следующее
От: Simon Riggs
Дата:
Сообщение: Re: pgindent-polluted commits