Re: Pg_upgrade error could not load library from 7.14/8.4 to 10.10 version

From: Ekaterina Amez <ekaterina(dot)amez(at)zunibal(dot)com>
To: pgsql-admin(at)lists(dot)postgresql(dot)org
Subject: Re: Pg_upgrade error could not load library from 7.14/8.4 to 10.10 version
Date: 2019-09-23 08:30:27
Message-ID: ef96252d-7d3d-283f-ddb3-9912770ffb9c@zunibal.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin

My apologies, I think I still don't have enough coffee in my body.

I've made my tests right, with drop function, but used a script and
named it drop language. This made me mess up things in my head and my
last email.

No more questions about this. Thanks for your patience.

El 23/9/19 a las 10:18, Achilleas Mantzios escribió:
> Dear Ekaterina,
>
> On 23/9/19 10:45 π.μ., Ekaterina Amez wrote:
>> Hi Achilleas,
>>
>> El 20/9/19 a las 11:41, Achilleas Mantzios escribió:
>>> On 20/9/19 12:22 μ.μ., Ekaterina Amez wrote:
>>>> Hi Achilleas,
>>>>
>>>> After restoring backup in v8.4:
>>>>
>>>> newdb=# select proname,probin,pronamespace from pg_proc where
>>>> proname='plpgsql_call_handler';
>>>>        proname        |                 probin | pronamespace
>>>> ----------------------+----------------------------------------+--------------
>>>>
>>>>  plpgsql_call_handler | $libdir/plpgsql |           11
>>>>  plpgsql_call_handler | /usr/lib/postgresql/8.4/lib/plpgsql.so
>>>> |         2200
>>>> (2 filas)
>>>>
>>>> As you said, 2200 is public namespace/schema and 11 is pg_catalog.
>>>>
>>>>
>>>> At the beginning of the backup file I can find these sentences:
>>>>
>>>> CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
>>>>     LANGUAGE c
>>>>     AS '/usr/lib/postgresql/8.4/lib/plpgsql.so',
>>>> 'plpgsql_call_handler'; <-- I've changed this line to use the right
>>>> path to plpgsql.so library
>>>>
>>>> CREATE PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;
>>>>
>>>> I guess these are the ones causing all of this. **What should be
>>>> the best way to handle this situation?** Remove these lines and
>>>> create the language explicitly when creating database?
>>>
>>> Just drop the 2nd function (in the public schema) :
>>> drop function public.plpgsql_call_handler ( ) ;
>>> and see pg_upgrade goes from there.
>>>
>>>> Or replace them with a create language sentence? Maybe something
>>>> else? My final goal is migrate from 7.14 server to 8.4 server and
>>>> after that (if I have an OK from the boss) upgrade 8.4 to the
>>>> latest version that I can use. Server uses CentOS, and probably I
>>>> won't be able to upgrade to v10 but I hope at least 9.5/9.6 will be
>>>> available.
>>>
>>
>> I've tested your suggestion and it went OK: restored db in 8.4, run
>> "drop language" sentence, stopped services and run pg_upgrade
> I wrote "drop function" not language.
>> --check which ended up with "Clusters are compatible". GREAT!! But...
>>
>> In one of my tests I forgot to change the path to plpgsql.so library,
>> and when restoring db it gave me an error saying it could not
> Drop the wrong extra function, and then you don't have to change the
> path. The correct function (in pg_catalog) will be correct.
>> access to the path given (of course, because that path only exists in
>> the server, in my machine is different). After restoring with this
>> error I found that:
>>
>> newdb=# select fn_now();
>>      fn_now
>> ----------------
>>  20190923085521
>> (1 fila)
>>
>> newdb=# select proname,probin,pronamespace from pg_proc where
>> proname='plpgsql_call_handler';
>>        proname        |     probin      | pronamespace
>> ----------------------+-----------------+--------------
>>  plpgsql_call_handler | $libdir/plpgsql |           11
>> (1 fila)
>>
>> Which means that despite the error, language has been created. So in
>> the end, not creating plpgsql_call_handler function and running "drop
>> language" both leads me to the same result. I understood this piece
>> of code [1] like: "create this language called plpgsql that will be
>> interpreted by this function called plpgsql_call_handler wich code is
>> in the library plpgsql.so". But with these results don't know the
>> meaning of this code, as one of the solutions is drop language after
>> creating, and the other one is create language without it's handler.
>> I would appreciate an explanation about this, why is this happening
>> or what am I misunderstanding.
>>
>> [1] this piece of code:
>> CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
>>     LANGUAGE c
>>     AS '/usr/lib/pgsql/plpgsql.so', 'plpgsql_call_handler';
>>
>> CREATE PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler;
> You're kinda messing up FUNCTION with LANGUAGE. Read the docs, and if
> you find any questions then go ahead and ask again.
> Please try to just DROP the extra public.plpgsql_call_handler (not the
> language) and try again.
>>
>>
>>
>
>

In response to

Browse pgsql-admin by date

  From Date Subject
Next Message Milan Oparnica 2019-09-23 09:07:28 Re: POSTGRES ISSUES
Previous Message Achilleas Mantzios 2019-09-23 08:18:53 Re: Pg_upgrade error could not load library from 7.14/8.4 to 10.10 version