Polish PL/Perl documentation. The README file got shrunk to being a
authorPeter Eisentraut
Tue, 19 Dec 2000 18:16:26 +0000 (18:16 +0000)
committerPeter Eisentraut
Tue, 19 Dec 2000 18:16:26 +0000 (18:16 +0000)
pointer into the real documentation.

doc/src/sgml/plperl.sgml
src/pl/plperl/README

index 58023ac209a10983c3d4275087f7c1ba50258dab..2d47404c71ea2b369bfaa7f867fe0e0b530bf70b 100644 (file)
 
 
-  PL/perl - Perl Procedural Language
+
PL/Perl - Perl Procedural Language
+
+  PL/Perl allows you to write functions in the Perl programming
+  language which may be used in SQL queries as if they were built into
+  Postgres.
+
+  The PL/Perl intepreter is a full Perl interpreter. However, certain
+  operations have been disabled in order to maintain the security of
+  the system.  In general, the operations that are restricted are
+  those that interact with the environment. This includes filehandle
+  operations, require, and use
+  (for external modules).  It should be noted that this security is
+  not absolute. Indeed, several Denial-of-Service attacks are still
+  possible - memory exhaustion and endless loops are two examples.
+
+  Building and Installing
 
   
-   This chapter describes how to compile, install and
-   use PL/Perl.
+   In order to build and install PL/Perl if you are installing
+   Postgres from source then the
+    must be supplied to the
+   configure script.  PL/Perl requires that, when
+   Perl was installed, the
+   libperl library was build as a shared object.
+   At the time of this writing, this is almost never the case in the
+   Perl packages that are distributed with the operating systems.  A
+   message like this will appear during the build to point out this
+   fact:
+
+
+*****
+* Cannot build PL/Perl because libperl is not a shared library.
+* Skipped.
+*****
+
+
+   Therefore it is likely that you will have to re-build and install
+   Perl manually to be able to build
+   PL/Perl.
   
-  
-   Overview
-   
-    PL/Perl allows you to write functions in the Perl scripting
-    language which may be used in SQL queries as if they were 
-    built into Postgres
-   
-   
-    The PL/Perl intepreter is a full Perl interpreter. However,
-    certain operations have been disabled in order to increase
-    the security level of the system.
-   
-   
-    In general, the operations that are restricted are those that
-    interact with the environment. This includes filehandle operations,
-    require, and use (for external
-    modules).
-   
-   
-    It should be noted that this security is not absolute. Indeed, several
-    Denial-of-Service attacks are still possible - memory exhaustion and
-    endless loops are two.
-   
-  
 
-  
-   Building and Installing
-   
-    Assuming that the Postgres
-    source tree is rooted at $PGSRC, then the Pl/perl source
-    code is located in $PGSRC/src/pl/plperl.
-   
-   
-    To build, simply do the following:
-    
-cd $PGSRC/src/pl/plperl
-perl Makefile.PL
-make
-    
-   
+  
+   When you want to retry to build PL/Perl after having reinstalled
+   Perl, then change to the directory
+   src/pl/plperl in the
+   Postgres source tree and issue the commands
+
+gmake clean
+gmake all
+gmake install
+
+  
 
-   
-    This will create a shared library file. On a Linux system, it will be
-    named plperl.so. The extension may differ on other systems.
-   
-   
-    The shared library should then be copied into the lib subdirectory of the
-    postgres installation.
-   
-   
-    The createlang command is used to install the language into a database.
-    If it is installed into template1, all future databases will have the
-    language installed automatically.
-   
-  
+  
+   The createlang command is used to install the
+   language into a database.
+
+$ createlang plperl template1
+
+   If it is installed into template1, all future databases will have
+   the language installed automatically.
+  
 
-  
-   Using PL/Perl
-   
-    Assume you have the following table:
-    
+  Using PL/Perl
+
+  
+   Assume you have the following table:
+
 CREATE TABLE EMPLOYEE (
     name text,
-    basesalary int4,
-    bonus int4 );
-    
-
-    In order to get the total compensation (base + bonus) we could
-    define a function as follows:
-    
-CREATE FUNCTION totalcomp(int4, int4) RETURNS int4
+    basesalary integer,
+    bonus integer
+);
+
+
+   In order to get the total compensation (base + bonus) we could
+   define a function as follows:
+
+CREATE FUNCTION totalcomp(integer, integer) RETURNS integer
     AS 'return $_[0] + $_[1]'
     LANGUAGE 'plperl';
-    
+
 
-    Note that the arguments are passed to the function in
-    @_ as might be expected. Also, because
-    of the quoting rules for the SQL creating the function, you
-    may find yourself using the extended quoting functions (qq[],
-    q[], qw[]) more often that you are used to.
-   
-   
-    We may now use our function like so:
-    
-SELECT name, totalcomp(basesalary, bonus) from employee
-    
-   
-   
-    But, we can also pass entire tuples to our function:
-    
-CREATE FUNCTION empcomp(employee) returns int4
-    AS 'my $emp = shift;
-        return $emp->{''basesalary''} + $emp->{''bonus''};'
-    LANGUAGE 'plperl';
-    
-    A tuple is passed as a reference to hash. The keys are the names of
-    fields in the tuples. The values are values of the corresponding
-    field in the tuple.
-   
+   Notice that the arguments to the function are passed in
+   @_ as might be expected.
+  
+
+  
+   We can now use our function like so:
+
+SELECT name, totalcomp(basesalary, bonus) FROM employee;
+
+  
+
+  
+   But, we can also pass entire tuples to our functions:
+
+CREATE FUNCTION empcomp(employee) RETURNS integer AS '
+    my $emp = shift;
+    return $emp->{''basesalary''} + $emp->{''bonus''};
+' LANGUAGE 'plperl';
+
+   A tuple is passed as a reference to a hash. The keys are the names
+   of the fields in the tuples. The hash values are values of the
+   corresponding fields in the tuple.
+  
+
+  
    
-    The new function empcomp can used like:
-    
-SELECT name, empcomp(employee) from employee;
-    
+    Because the function body is passed as an SQL string literal to
+    CREATE FUNCTION you have to escape single
+    quotes within your Perl source, either by doubling them as shown
+    above, or by using the extended quoting functions
+    (q[]qq[],
+    qw[]).  Backslashes must be escaped by doubling
+    them.
    
-  
+  
+
+  
+   The new function empcomp can used like:
+
+SELECT name, empcomp(employee) FROM employee;
+
+  
+
+  
+   Here is an example of a function which will not work because file
+   system operations are not allowed for security reasons:
+
+CREATE FUNCTION badfunc() RETURNS integer AS '
+    open(TEMP, ">/tmp/badfile");
+    print TEMP "Gotcha!\n";
+    return 1;
+' LANGUAGE 'plperl';
+
+   The creation of the function will succeed, but executing it will not.
+  
+
+