plperl on windows - Mailing list pgsql-hackers

From Andres Freund
Subject plperl on windows
Date
Msg-id 20211004213816.t5zgv4ba5zfijqzc@alap3.anarazel.de
Whole thread Raw
Responses Re: plperl on windows  (Andres Freund <andres@anarazel.de>)
Re: plperl on windows  (Andres Freund <andres@anarazel.de>)
Re: plperl on windows  (Andres Freund <andres@anarazel.de>)
List pgsql-hackers
Hi,

For https://postgr.es/m/20211001222752.wrz7erzh4cajvgp6@alap3.anarazel.de I
was trying to enable plperl on windows. And run into quite a few roadblocks -
enough that I gave up.

1) plperl doesn't build against a modern-ish perl. The fix for that seems easy
   enough: https://postgr.es/m/20200501134711.08750c5f@antares.wagner.home

2) For some reason src/tools/install.pl doesn't install plperl[u].control,
   plperl[u]--1.0.sql - But apparently the buildfarm doesn't have that issue,
   because drongo successfully ran the plperl tests?

3) When building against strawberry perl 5.32.1.1 I see errors when loading
   plperl

4) When building against strawberry perl 5.30.3.1 I see a crash during
   execution of very simple statements [1]

5) Finally when building against strawberry perl 5.28.2.1, plperl kinda
   works. But there's a lot of regression test failures, many of them
   seemingly around error trapping.


I saw that there's also active state perl, but it seems to require clicking
through some terms and conditions for every download that I don't want to
agree to.

Greetings,

Andres Freund

[1]
Exception thrown at 0x000000006FD75DB8 (perl530.dll) in postgres.exe: 0xC0000005: Access violation reading location
0x0000000000000008.
     perl530.dll!Perl_mg_get() + 56 bytes    Unknown
    plperl.dll!select_perl_context(bool trusted) Line 667    C
     plperl.dll!plperl_inline_handler(FunctionCallInfoBaseData * fcinfo) Line 1941    C
     plperl.dll!plperlu_inline_handler(FunctionCallInfoBaseData * fcinfo) Line 2064    C
     postgres.exe!FunctionCall1Coll(FmgrInfo * flinfo, unsigned int collation, unsigned __int64 arg1) Line 1138    C
     postgres.exe!OidFunctionCall1Coll(unsigned int functionId, unsigned int collation, unsigned __int64 arg1) Line
1417   C
 
     postgres.exe!ExecuteDoStmt(ParseState * pstate, DoStmt * stmt, bool atomic) Line 2146    C
     postgres.exe!standard_ProcessUtility(PlannedStmt * pstmt, const char * queryString, bool readOnlyTree,
ProcessUtilityContextcontext, ParamListInfoData * params, QueryEnvironment * queryEnv, _DestReceiver * dest,
QueryCompletion* qc) Line 712    C
 
     postgres.exe!ProcessUtility(PlannedStmt * pstmt, const char * queryString, bool readOnlyTree,
ProcessUtilityContextcontext, ParamListInfoData * params, QueryEnvironment * queryEnv, _DestReceiver * dest,
QueryCompletion* qc) Line 530    C
 
     postgres.exe!PortalRunUtility(PortalData * portal, PlannedStmt * pstmt, bool isTopLevel, bool setHoldSnapshot,
_DestReceiver* dest, QueryCompletion * qc) Line 1157    C
 
     postgres.exe!PortalRunMulti(PortalData * portal, bool isTopLevel, bool setHoldSnapshot, _DestReceiver * dest,
_DestReceiver* altdest, QueryCompletion * qc) Line 1306    C
 
     postgres.exe!PortalRun(PortalData * portal, long count, bool isTopLevel, bool run_once, _DestReceiver * dest,
_DestReceiver* altdest, QueryCompletion * qc) Line 790    C
 
     postgres.exe!exec_simple_query(const char * query_string) Line 1222    C
     postgres.exe!PostgresMain(const char * dbname, const char * username) Line 4499    C
     postgres.exe!BackendRun(Port * port) Line 4561    C
     postgres.exe!SubPostmasterMain(int argc, char * * argv) Line 5066    C
     postgres.exe!main(int argc, char * * argv) Line 190    C
     postgres.exe!invoke_main() Line 79    C++
     postgres.exe!__scrt_common_main_seh() Line 288    C++
     postgres.exe!__scrt_common_main() Line 331    C++
     postgres.exe!mainCRTStartup(void * __formal) Line 17    C++
     kernel32.dll!BaseThreadInitThunk()    Unknown
     ntdll.dll!RtlUserThreadStart()    Unknown

[2]
--- C:/Users/anfreund/src/postgres/src/pl/plperl/expected/plperl.out    2021-03-02 00:29:34.416742000 -0800
+++ C:/Users/anfreund/src/postgres/src/pl/plperl/results/plperl.out     2021-10-04 14:31:45.773612500 -0700
@@ -660,8 +660,11 @@
   return $result;
 $$ LANGUAGE plperl;
 SELECT perl_spi_prepared_bad(4.35) as "double precision";
-ERROR:  type "does_not_exist" does not exist at line 2.
-CONTEXT:  PL/Perl function "perl_spi_prepared_bad"
+ double precision
+------------------
+
+(1 row)
+
 -- Test with a row type
 CREATE OR REPLACE FUNCTION perl_spi_prepared() RETURNS INTEGER AS $$
    my $x = spi_prepare('select $1::footype AS a', 'footype');
@@ -696,37 +699,28 @@
 NOTICE:  This is a test
 -- check that restricted operations are rejected in a plperl DO block
 DO $$ system("/nonesuch"); $$ LANGUAGE plperl;
-ERROR:  'system' trapped by operation mask at line 1.
-CONTEXT:  PL/Perl anonymous code block
...

--- C:/Users/anfreund/src/postgres/src/pl/plperl/expected/plperl_plperlu.out    2021-03-02 00:29:34.425742300 -0800
+++ C:/Users/anfreund/src/postgres/src/pl/plperl/results/plperl_plperlu.out     2021-10-04 14:31:48.065612400 -0700
@@ -10,11 +10,17 @@
     return 1;
 $$ LANGUAGE plperlu; -- compile plperlu code
 SELECT * FROM bar(); -- throws exception normally (running plperl)
-ERROR:  syntax error at or near "invalid" at line 4.
-CONTEXT:  PL/Perl function "bar"
+ bar
+-----
+
+(1 row)
+
 SELECT * FROM foo(); -- used to cause backend crash (after switching to plperlu)
-ERROR:  syntax error at or near "invalid" at line 4. at line 2.
-CONTEXT:  PL/Perl function "foo"
+ foo
+-----
+   1
+(1 row)
+
-ERROR:  Unable to load Errno.pm into plperl at line 2.
-BEGIN failed--compilation aborted at line 2.
+ERROR:  didn't get a CODE reference from compiling function "use_plperl"
 CONTEXT:  compilation of PL/Perl function "use_plperl"
 -- make sure our overloaded require op gets restored/set correctly
 select use_plperlu();
@@ -86,6 +91,5 @@
 AS $$
 use Errno;
 $$;
-ERROR:  Unable to load Errno.pm into plperl at line 2.
-BEGIN failed--compilation aborted at line 2.
+ERROR:  didn't get a CODE reference from compiling function "use_plperl"
 CONTEXT:  compilation of PL/Perl function "use_plperl"



pgsql-hackers by date:

Previous
From: Jaime Casanova
Date:
Subject: Re: Patch: Range Merge Join
Next
From: Andres Freund
Date:
Subject: Re: plperl on windows