Thread: pl/perl extension fails on Windows
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.
Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.net
This looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.netThis looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
Now I've had a chance to take a look I see that Strawberry 5.40 has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with 5.40 if you comment out theses lines in meson.build?
if cc.get_id() == 'msvc'
# prevent binary mismatch between MSVC built plperl and Strawberry or
# msys ucrt perl libraries
perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
endif
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
On 2024-09-10 Tu 7:51 AM, Andrew Dunstan wrote:
On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.netThis looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
Now I've had a chance to take a look I see that Strawberry 5.40 has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with 5.40 if you comment out theses lines in meson.build?
if cc.get_id() == 'msvc'
# prevent binary mismatch between MSVC built plperl and Strawberry or
# msys ucrt perl libraries
perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
endif
psql (17rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
postgres=#
postgres=#
postgres=# create extension plperl;
On Tue, Sep 10, 2024 at 7:17 PM Andrew Dunstan <andrew@dunslane.net> wrote:
On 2024-09-10 Tu 7:51 AM, Andrew Dunstan wrote:
On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.netThis looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
Now I've had a chance to take a look I see that Strawberry 5.40 has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with 5.40 if you comment out theses lines in meson.build?
if cc.get_id() == 'msvc'
# prevent binary mismatch between MSVC built plperl and Strawberry or
# msys ucrt perl libraries
perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
endif
Hi Andrew,Thanks. I commented above lines in the meson.build file and built the installer with Strawberry 5.40 . Now able to create the extension.--c:\Program Files\PostgreSQL\17>bin\psql.exe -d postgres -p 5436
psql (17rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
postgres=#
postgres=#
postgres=# create extension plperl;--So, will this change be a part of the PG17 GA release?
Probably not. The difficulty is that it's required for some versions of perl and breaks others. We need to come up with a reliable test for it.
Maybe we need to look at the output of `perl -V` and only output the flag if it doesn't contain USE_THREAD_SAFE_LOCALE. If anyone has a better idea I am all ears.
It's kind of annoying that this could tie us so closely to a particular perl binary.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
On 2024-09-11 We 7:36 AM, Andrew Dunstan wrote:
On 2024-09-11 We 3:37 AM, Muralikrishna Bandaru wrote:On Tue, Sep 10, 2024 at 7:17 PM Andrew Dunstan <andrew@dunslane.net> wrote:
On 2024-09-10 Tu 7:51 AM, Andrew Dunstan wrote:
On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.netThis looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
Now I've had a chance to take a look I see that Strawberry 5.40 has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with 5.40 if you comment out theses lines in meson.build?
if cc.get_id() == 'msvc'
# prevent binary mismatch between MSVC built plperl and Strawberry or
# msys ucrt perl libraries
perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
endif
Hi Andrew,Thanks. I commented above lines in the meson.build file and built the installer with Strawberry 5.40 . Now able to create the extension.--c:\Program Files\PostgreSQL\17>bin\psql.exe -d postgres -p 5436
psql (17rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
postgres=#
postgres=#
postgres=# create extension plperl;--So, will this change be a part of the PG17 GA release?
Probably not. The difficulty is that it's required for some versions of perl and breaks others. We need to come up with a reliable test for it.
Maybe we need to look at the output of `perl -V` and only output the flag if it doesn't contain USE_THREAD_SAFE_LOCALE. If anyone has a better idea I am all ears.
It's kind of annoying that this could tie us so closely to a particular perl binary.
Here's a patch along the suggested lines.
Pushed. All live branches now have the new logic.
cheers
andrew
-- Andrew Dunstan EDB: https://www.enterprisedb.com
On 2024-09-12 Th 9:57 AM, Andrew Dunstan wrote:
On 2024-09-11 We 7:36 AM, Andrew Dunstan wrote:
On 2024-09-11 We 3:37 AM, Muralikrishna Bandaru wrote:On Tue, Sep 10, 2024 at 7:17 PM Andrew Dunstan <andrew@dunslane.net> wrote:
On 2024-09-10 Tu 7:51 AM, Andrew Dunstan wrote:
On 2024-09-10 Tu 6:20 AM, Muralikrishna Bandaru wrote:Hi,I built PG17 rc1 using meson on Windows with the option "-Dplperl=enabled" . When I tried to create the extension,it crashed the database.--postgres=# create extension plperl;
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
The connection to the server was lost. Attempting reset: Succeeded.The log contains the following error.src/pl/plperl/Util.c: loadable library and perl binaries are mismatched (got first handshake key 0000000012d00080, needed 0000000012c00080)--This issue is seen with strawberry perl 5.40 not with 5.38 . The Perl that is used during compilation and on the target machine is the same.I have used strawberry perl 5.40 , which is available in the strawberry perl home page ,but 5.40 is not available in the release page . So, is it recommended to use perl 5.40 ?Please let me know if you need any other information.
We've seen similar things before. See for example:
https://postgr.es/m/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
https://postgr.es/m/c2da86a0-2906-744c-923d-16da6047875e@dunslane.netThis looks like we are defining something we should not be, or not defining something we should be. We just need to find out what it is :-)
In the meantime, I would suggest sticking to 5.38.
Now I've had a chance to take a look I see that Strawberry 5.40 has USE_THREAD_SAFE_LOCALE defined. Can you try what happens with 5.40 if you comment out theses lines in meson.build?
if cc.get_id() == 'msvc'
# prevent binary mismatch between MSVC built plperl and Strawberry or
# msys ucrt perl libraries
perl_ccflags += ['-DNO_THREAD_SAFE_LOCALE']
endif
Hi Andrew,Thanks. I commented above lines in the meson.build file and built the installer with Strawberry 5.40 . Now able to create the extension.--c:\Program Files\PostgreSQL\17>bin\psql.exe -d postgres -p 5436
psql (17rc1)
WARNING: Console code page (437) differs from Windows code page (1252)
8-bit characters might not work correctly. See psql reference
page "Notes for Windows users" for details.
Type "help" for help.
postgres=#
postgres=#
postgres=# create extension plperl;--So, will this change be a part of the PG17 GA release?
Probably not. The difficulty is that it's required for some versions of perl and breaks others. We need to come up with a reliable test for it.
Maybe we need to look at the output of `perl -V` and only output the flag if it doesn't contain USE_THREAD_SAFE_LOCALE. If anyone has a better idea I am all ears.
It's kind of annoying that this could tie us so closely to a particular perl binary.
Here's a patch along the suggested lines.
Pushed. All live branches now have the new logic.