Install server-side language PL/pgSQL by default.
authorBruce Momjian <[email protected]>
Fri, 18 Dec 2009 21:28:42 +0000 (21:28 +0000)
committerBruce Momjian <[email protected]>
Fri, 18 Dec 2009 21:28:42 +0000 (21:28 +0000)
doc/src/sgml/installation.sgml
src/bin/initdb/initdb.c
src/bin/pg_dump/pg_dump.c
src/test/regress/GNUmakefile

index f9221c9895cdb25eedb39bebaa19ac6a8dccc0b5..ccc3d665dcaa2b532fe55ea814108494db0fdc85 100644 (file)
@@ -2266,14 +2266,14 @@ hosts=local4,bind4
      is <command>createlang</command> failing with unusual errors.
      For example, running as the owner of the PostgreSQL installation:
 <screen>
--bash-3.00$ createlang plpgsql template1
-createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plpgsql.so": A memory address is not in the address space for the process.
+-bash-3.00$ createlang plperl template1
+createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plperl.so": A memory address is not in the address space for the process.
 </screen>
     Running as a non-owner in the group posessing the PostgreSQL
     installation:
 <screen>
--bash-3.00$ createlang plpgsql template1
-createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plpgsql.so": Bad address
+-bash-3.00$ createlang plperl template1
+createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plperl.so": Bad address
 </screen>
      Another example is out of memory errors in the PostgreSQL server
      logs, with every memory allocation near or greater than 256 MB
index 917177eedf2eea1a8a59699a810280f949c670f7..ac8d111d1844ef2727e03e72094ea75d6678a778 100644 (file)
@@ -176,6 +176,7 @@ static void setup_dictionary(void);
 static void setup_privileges(void);
 static void set_info_version(void);
 static void setup_schema(void);
+static void load_plpgsql(void);
 static void vacuum_db(void);
 static void make_template0(void);
 static void make_postgres(void);
@@ -1893,6 +1894,31 @@ setup_schema(void)
    check_ok();
 }
 
+/*
+ * load PL/pgsql server-side language
+ */
+static void
+load_plpgsql(void)
+{
+   PG_CMD_DECL;
+
+   fputs(_("loading PL/pgSQL server-side language ... "), stdout);
+   fflush(stdout);
+
+   snprintf(cmd, sizeof(cmd),
+            "\"%s\" %s template1 >%s",
+            backend_exec, backend_options,
+            DEVNULL);
+
+   PG_CMD_OPEN;
+
+   PG_CMD_PUTS("CREATE LANGUAGE plpgsql;\n");
+
+   PG_CMD_CLOSE;
+
+   check_ok();
+}
+
 /*
  * clean everything up in template1
  */
@@ -3134,6 +3160,8 @@ main(int argc, char *argv[])
 
    setup_schema();
 
+   load_plpgsql();
+
    vacuum_db();
 
    make_template0();
index 8022117830d87fafbdbcf7b8f6624d0bf8858005..e058dffbc2a2d239d3b7da3b9712ed112bd81c03 100644 (file)
@@ -32,6 +32,7 @@
 
 #include "access/attnum.h"
 #include "access/sysattr.h"
+#include "access/transam.h"
 #include "catalog/pg_cast.h"
 #include "catalog/pg_class.h"
 #include "catalog/pg_default_acl.h"
@@ -4599,8 +4600,10 @@ getProcLangs(int *numProcLangs)
                          "(%s lanowner) AS lanowner "
                          "FROM pg_language "
                          "WHERE lanispl "
+                         /* do not dump initdb-installed languages */
+                         "AND oid >= %u "
                          "ORDER BY oid",
-                         username_subquery);
+                         username_subquery, FirstNormalObjectId);
    }
    else if (g_fout->remoteVersion >= 80300)
    {
@@ -4610,9 +4613,10 @@ getProcLangs(int *numProcLangs)
                          "lanvalidator,  lanacl, "
                          "(%s lanowner) AS lanowner "
                          "FROM pg_language "
-                         "WHERE lanispl "
+                         "WHERE lanispl%s"
                          "ORDER BY oid",
-                         username_subquery);
+                         username_subquery,
+                         binary_upgrade ? "\nAND lanname != 'plpgsql'" : "");
    }
    else if (g_fout->remoteVersion >= 80100)
    {
index 9c0376e0c248d57556ce7d915963c99eb29769fc..646420ec2a648a44dfd9a70abf2afc1f240598e3 100644 (file)
@@ -138,7 +138,7 @@ tablespace-setup:
 ## Run tests
 ##
 
-pg_regress_call = ./pg_regress --inputdir=$(srcdir) --dlpath=. --multibyte=$(MULTIBYTE) --load-language=plpgsql $(NOLOCALE)
+pg_regress_call = ./pg_regress --inputdir=$(srcdir) --dlpath=. --multibyte=$(MULTIBYTE) $(NOLOCALE)
 
 check: all
    $(pg_regress_call) --temp-install=./tmp_check --top-builddir=$(top_builddir) --schedule=$(srcdir)/parallel_schedule $(MAXCONNOPT) $(TEMP_CONF)