pl/perl extension fails on Windows

Started by Muralikrishna Bandaruover 1 year ago8 messagesbugs
Jump to latest
#1Muralikrishna Bandaru
muralikrishna.bandaru@enterprisedb.com

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 <https://strawberryperl.com/&gt; ,but 5.40 is not
available in the release page <https://strawberryperl.com/releases.html&gt; .
So, is it recommended to use perl 5.40 ?

Please let me know if you need any other information.

Thanks,
Murali krishna.

#2Andrew Dunstan
andrew@dunslane.net
In reply to: Muralikrishna Bandaru (#1)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but  5.40 is
not available in the release page
<https://strawberryperl.com/releases.html&gt; . 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#2)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but  5.40 is
not available in the release page
<https://strawberryperl.com/releases.html&gt; . 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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

#4Muralikrishna Bandaru
muralikrishna.bandaru@enterprisedb.com
In reply to: Andrew Dunstan (#3)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but 5.40 is not
available in the release page <https://strawberryperl.com/releases.html&gt;
. 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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?

cheers

Show quoted text

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com

#5Andrew Dunstan
andrew@dunslane.net
In reply to: Muralikrishna Bandaru (#4)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but 
5.40 is not available in the release page
<https://strawberryperl.com/releases.html&gt; . 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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

#6Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#5)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but 
5.40 is not available in the release page
<https://strawberryperl.com/releases.html&gt; . 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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.

cheers

andrew

--
Andrew Dunstan
EDB:https://www.enterprisedb.com

Attachments:

perl-locales-fix.patchtext/x-patch; charset=UTF-8; name=perl-locales-fix.patchDownload+6-3
#7Andrew Dunstan
andrew@dunslane.net
In reply to: Andrew Dunstan (#6)
Re: pl/perl extension fails on Windows

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 <https://strawberryperl.com/&gt; ,but 
5.40 is not available in the release page
<https://strawberryperl.com/releases.html&gt; . 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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

#8Muralikrishna Bandaru
muralikrishna.bandaru@enterprisedb.com
In reply to: Andrew Dunstan (#7)
Re: pl/perl extension fails on Windows

On Sat, Sep 14, 2024 at 8:12 PM Andrew Dunstan <andrew@dunslane.net> wrote:

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 <https://strawberryperl.com/&gt; ,but 5.40 is not
available in the release page <https://strawberryperl.com/releases.html&gt;
. 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:

/messages/by-id/20211005004334.tgjmro4kuachwiuc@alap3.anarazel.de
/messages/by-id/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.

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.

Thank you Andrew.

Show quoted text

cheers

andrew

--
Andrew Dunstan
EDB: https://www.enterprisedb.com