Обсуждение: BUG #6532: pg_upgrade fails on Python stored procedures

Поиск
Список
Период
Сортировка

BUG #6532: pg_upgrade fails on Python stored procedures

От
stuart@stuartbishop.net
Дата:
The following bug has been logged on the website:

Bug reference:      6532
Logged by:          Stuart Bishop
Email address:      stuart@stuartbishop.net
PostgreSQL version: 9.1.3
Operating system:   Ubuntu
Description:=20=20=20=20=20=20=20=20

The 9.1.3 changelog states pg_upgrade's handing of plpython stored
procedures was fixed, but that does not appear to be the case:

postgres@aargh:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade --version
pg_upgrade (PostgreSQL) 9.1.3
postgres@aargh:~$ /usr/lib/postgresql/9.1/bin/pg_upgrade=20
--old-bindir=3D/usr/lib/postgresql/8.4/bin
--new-bindir=3D/usr/lib/postgresql/9.1/bin --old-datadir=3D8.4/main
--new-datadir=3D9.1/mig --old-port=3D5433 --new-port=3D5435
Performing Consistency Checks
-----------------------------
Checking current, bin, and data directories                 ok
Checking cluster versions                                   ok
Checking database user is a superuser                       ok
Checking for prepared transactions                          ok
Checking for reg* system oid user data types                ok
Checking for contrib/isn with bigint-passing mismatch       ok
Checking for large objects                                  ok
Creating catalog dump                                       ok
Checking for prepared transactions                          ok
Checking for presence of required libraries                 ok

| If pg_upgrade fails after this point, you must
| re-initdb the new cluster before continuing.
| You will also need to remove the ".old" suffix
| from 8.4/main/global/pg_control.old.

Performing Upgrade
------------------
Adding ".old" suffix to old global/pg_control               ok
Analyzing all rows in the new cluster                       ok
Freezing all rows on the new cluster                        ok
Deleting new commit clogs                                   ok
Copying old commit clogs to new server                      ok
Setting next transaction id for new cluster                 ok
Resetting WAL archives                                      ok
Setting frozenxid counters in new cluster                   ok
Creating databases in the new cluster                       ok
Adding support functions to new cluster                     ok
Restoring database schema to new cluster=20=20=20=20=20=20=20=20=20=20=20=
=20=20=20=20=20=20=20=20
psql:/var/lib/postgresql/pg_upgrade_dump_db.sql:3992: ERROR:  could not
access file "$libdir/plpython": No such file or directory

There were problems executing "/usr/lib/postgresql/9.1/bin/psql" --set
ON_ERROR_STOP=3Don --no-psqlrc --port 5435 --username "postgres" -f
"/var/lib/postgresql/pg_upgrade_dump_db.sql" --dbname template1 >>
"/dev/null"
Failure, exiting


The relevant section of pg_upgrade_dump_db.sql is:

CREATE FUNCTION plpython_call_handler() RETURNS language_handler
    LANGUAGE c
    AS '$libdir/plpython', 'plpython_call_handler';

Re: BUG #6532: pg_upgrade fails on Python stored procedures

От
Andres Freund
Дата:
Hi,

On Thursday, March 15, 2012 02:13:29 PM stuart@stuartbishop.net wrote:
> The 9.1.3 changelog states pg_upgrade's handing of plpython stored
> procedures was fixed, but that does not appear to be the case:
> ...
> access file "$libdir/plpython": No such file or directory
Well. That looks like you didn't install plpython on the new cluster. Are you
sure its there?

Andres

Re: BUG #6532: pg_upgrade fails on Python stored procedures

От
Stuart Bishop
Дата:
On Thu, Mar 15, 2012 at 8:54 PM, Andres Freund <andres@anarazel.de> wrote:
> Hi,
>
> On Thursday, March 15, 2012 02:13:29 PM stuart@stuartbishop.net wrote:
>> The 9.1.3 changelog states pg_upgrade's handing of plpython stored
>> procedures was fixed, but that does not appear to be the case:
>> ...
>> access file "$libdir/plpython": No such file or directory
> Well. That looks like you didn't install plpython on the new cluster. Are you
> sure its there?

Yes, it is there. I can see the library with the new name of
plpython2.so, not the old plpython.so from 8.4. createlang installs
the language just fine if I build a cluster and database myself.


--
Stuart Bishop <stuart@stuartbishop.net>
http://www.stuartbishop.net/

Re: BUG #6532: pg_upgrade fails on Python stored procedures

От
Stuart Bishop
Дата:
On Thu, Mar 15, 2012 at 9:01 PM, Stuart Bishop <stuart@stuartbishop.net> wrote:

> Yes, it is there. I can see the library with the new name of
> plpython2.so, not the old plpython.so from 8.4. createlang installs
> the language just fine if I build a cluster and database myself.

As expected, symlinking plpython2.so to plpython.so works around
things. I have no idea if this work around will cause problems when
upgrading the db to PG 9.2+.

--
Stuart Bishop <stuart@stuartbishop.net>
http://www.stuartbishop.net/

Re: BUG #6532: pg_upgrade fails on Python stored procedures

От
Bruce Momjian
Дата:
On Thu, Mar 15, 2012 at 01:13:29PM +0000, stuart@stuartbishop.net wrote:
> The following bug has been logged on the website:
>
> Bug reference:      6532
> Logged by:          Stuart Bishop
> Email address:      stuart@stuartbishop.net
> PostgreSQL version: 9.1.3
> Operating system:   Ubuntu
> Description:
>
> The 9.1.3 changelog states pg_upgrade's handing of plpython stored
> procedures was fixed, but that does not appear to be the case:

The change in 9.1.3 was to allow the pg_upgrade code which checks if all
the shared librarires are in place to see plpython.so as equivalent to
plpython2.so.  I did not modify pg_dump at all, which is where you are
seeing the error.

> There were problems executing "/usr/lib/postgresql/9.1/bin/psql" --set
> ON_ERROR_STOP=on --no-psqlrc --port 5435 --username "postgres" -f
> "/var/lib/postgresql/pg_upgrade_dump_db.sql" --dbname template1 >>
> "/dev/null"
> Failure, exiting
>
>
> The relevant section of pg_upgrade_dump_db.sql is:
>
> CREATE FUNCTION plpython_call_handler() RETURNS language_handler
>     LANGUAGE c
>     AS '$libdir/plpython', 'plpython_call_handler';

OK, I am pretty confused by this.

Here is all I get in the pg_dumpall --binary-upgrade output for
plpython when I create one plpython function:

    --
    -- Name: plpythonu; Type: PROCEDURAL LANGUAGE; Schema: -; Owner: postgres
    --

    CREATE OR REPLACE PROCEDURAL LANGUAGE plpythonu;


    ALTER PROCEDURAL LANGUAGE plpythonu OWNER TO postgres;

    SET search_path = public, pg_catalog;

    --
    -- Name: pymax(integer, integer); Type: FUNCTION; Schema: public; Owner: postgres
    --

    CREATE FUNCTION pymax(a integer, b integer) RETURNS integer
        LANGUAGE plpythonu
        AS $$
             if a > b:
               return a
             return b
         $$;


    ALTER FUNCTION public.pymax(a integer, b integer) OWNER TO postgres;

I have repeatedly upgraded from 9.0.X to 9.1.3 and am seeing no
failures.  The big question is what are you doing that is causing the
plpython_call_handler() function to be dumped?  That is an internal
function.  What is your old PG version?  I tested 8.4 and also could not
get the failure you see either.

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +