Hi,

For https://postgr.es/m/20211001222752.wrz7erzh4cajv...@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.08750...@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, ProcessUtilityContext context, 
ParamListInfoData * params, QueryEnvironment * queryEnv, _DestReceiver * dest, 
QueryCompletion * qc) Line 712     C
        postgres.exe!ProcessUtility(PlannedStmt * pstmt, const char * 
queryString, bool readOnlyTree, ProcessUtilityContext context, 
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"


Reply via email to