Remove createlang and droplang
authorPeter Eisentraut
Thu, 23 Mar 2017 18:16:45 +0000 (14:16 -0400)
committerPeter Eisentraut
Thu, 23 Mar 2017 18:16:45 +0000 (14:16 -0400)
They have been deprecated since PostgreSQL 9.1.

Reviewed-by: Magnus Hagander
Reviewed-by: Daniel Gustafsson
21 files changed:
doc/src/sgml/installation.sgml
doc/src/sgml/plperl.sgml
doc/src/sgml/plpython.sgml
doc/src/sgml/pltcl.sgml
doc/src/sgml/ref/allfiles.sgml
doc/src/sgml/ref/create_function.sgml
doc/src/sgml/ref/create_language.sgml
doc/src/sgml/ref/createlang.sgml [deleted file]
doc/src/sgml/ref/drop_language.sgml
doc/src/sgml/ref/droplang.sgml [deleted file]
doc/src/sgml/reference.sgml
doc/src/sgml/release-9.1.sgml
doc/src/sgml/xplang.sgml
src/bin/scripts/.gitignore
src/bin/scripts/Makefile
src/bin/scripts/createlang.c [deleted file]
src/bin/scripts/droplang.c [deleted file]
src/bin/scripts/nls.mk
src/bin/scripts/t/030_createlang.pl [deleted file]
src/bin/scripts/t/060_droplang.pl [deleted file]
src/tools/msvc/Install.pm

index 79201b78e33d8bf441eb0165672e0633a3c91ca6..f8a222e6379ca699eb6f652c4426dce2c9136e26 100644 (file)
@@ -2256,17 +2256,17 @@ hosts=local4,bind4
      memory management.  You can have a server with many multiples of
      gigabytes of RAM free, but still get out of memory or address
      space errors when running applications.  One example
-     is createlang failing with unusual errors.
+     is loading of extensions failing with unusual errors.
      For example, running as the owner of the PostgreSQL installation:
 
--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.
+=# CREATE EXTENSION plperl;
+ERROR:  could not load library "/opt/dbs/pgsql/lib/plperl.so": A memory address is not in the address space for the process.
 
     Running as a non-owner in the group possessing the PostgreSQL
     installation:
 
--bash-3.00$ createlang plperl template1
-createlang: language installation failed: ERROR:  could not load library "/opt/dbs/pgsql748/lib/plperl.so": Bad address
+=# CREATE EXTENSION plperl;
+ERROR:  could not load library "/opt/dbs/pgsql/lib/plperl.so": Bad address
 
      Another example is out of memory errors in the PostgreSQL server
      logs, with every memory allocation near or greater than 256 MB
@@ -2284,7 +2284,7 @@ createlang: language installation failed: ERROR:  could not load library "/opt/d
     
 
     
-     In the case of the <command>createlang> example, above,
+     In the case of the <literal>plperl> example, above,
      check your umask and the permissions of the binaries in your
      PostgreSQL installation.  The binaries involved in that example
      were 32-bit and installed as mode 750 instead of 755.  Due to the
index 9117769125a9e0b868cc970ed3782796243c7de1..dd2ffbc6ceb0aa68224561665a828a921ee68da3 100644 (file)
@@ -27,8 +27,7 @@
 
   
    To install PL/Perl in a particular database, use
-   CREATE EXTENSION plperl, or from the shell command line use
-   createlang plperl dbname.
+   CREATE EXTENSION plperl.
   
 
   
index 46397781be4c15fe0d8301d64a03c5e84970d889..fb5d336efc98d6d2bc08ebd1ca77a463457f688c 100644 (file)
@@ -14,8 +14,7 @@
 
  
   To install PL/Python in a particular database, use
-  CREATE EXTENSION plpythonu, or from the shell command line use
-  createlang plpythonu dbname (but
+  CREATE EXTENSION plpythonu (but
   see also ).
  
 
index ed745a74810d8319785e90f72873a270e9852c88..ba4af2aec51eb14f1d6054f87fd715dacc669268 100644 (file)
     directory if Tcl support is specified in the configuration step of
     the installation procedure.  To install PL/Tcl
     and/or PL/TclU in a particular database, use the
-    CREATE EXTENSION command or the
-    createlang program, for example
-    createlang pltcl dbname or
-    createlang pltclu dbname.
+    CREATE EXTENSION command, for example
+    CREATE EXTENSION pltcl or
+    CREATE EXTENSION pltclu.
    
   
 
index 2bc4d9fd64f51947e65f67e0921a19986527756d..974e1b74e42f786f7bedb86e91d378c6401f609b 100644 (file)
@@ -182,10 +182,8 @@ Complete list of usable sgml source files in this directory.
 
 
 
-
 
 
-
 
 
 
index 9d0d2f4beb2d5e26b05a8a331a6896fdf2d04c41..3f86141f804487f0f2891f0a4e27c6d045f418fc 100644 (file)
@@ -847,7 +847,6 @@ COMMIT;
    
    
    
-   
   
  
 
index 41da16d9775c580e0b8e3485c8c9f637e8033951..75165b677f1147fe88f4734f4fc08978e41bbfa3 100644 (file)
@@ -230,21 +230,14 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE 
   Notes
 
   
-   The  program is a simple wrapper around
-   the CREATE LANGUAGE command.  It eases
-   installation of procedural languages from the shell command line.
-  
-
-  
-   Use , or better yet the 
-   linkend="app-droplang"> program, to drop procedural languages.
+   Use  to drop procedural languages.
   
 
   
    The system catalog pg_language (see 
    linkend="catalog-pg-language">) records information about the
-   currently installed languages.  Also, createlang>
-   has an option to list the installed languages.
+   currently installed languages.  Also, the psql>
+   command \dL lists the installed languages.
   
 
   
@@ -325,8 +318,6 @@ CREATE LANGUAGE plsample
    
    
    
-   
-   
   
  
 
diff --git a/doc/src/sgml/ref/createlang.sgml b/doc/src/sgml/ref/createlang.sgml
deleted file mode 100644 (file)
index e9c95d3..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-
-
-
-  createlang
-
-  createlang
-  1
-  Application
-
-  createlang
-  install a PostgreSQL procedural language
-
-  
-   createlang
-   connection-option
-   langname
-   dbname
-  
-
-  
-   createlang
-   connection-option
-   
-   dbname
-  
-
-
-  Description
-
-  
-   createlang is a utility for adding a
-   procedural language to a PostgreSQL database.
-  
-
-  
-   createlang is just a wrapper around the
-    SQL command.
-  
-
-  
-   
-    createlang is deprecated and may be removed
-    in a future PostgreSQL release.  Direct use
-    of the CREATE EXTENSION command is recommended instead.
-   
-  
-
-
-  Options
-
-   
-    createlang accepts the following command-line arguments:
-
-    
-     
-      langname
-      
-       
-        Specifies the name of the procedural language to be
-        installed.  (This name is lower-cased.)
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Specifies the database to which the language should be added.
-        The default is to use the database with the same name as the
-        current system user.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Display SQL commands as they are executed.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Show a list of already installed languages in the target database.
-       
-      
-     
-
-     
-       
-       
-       
-       
-       Print the createlang version and exit.
-       
-       
-     
-
-    
-      
-      
-      
-      
-      Show help about createlang command line
-      arguments, and exit.
-      
-      
-    
-
-    
-   
-
-   
-    createlang also accepts
-    the following command-line arguments for connection parameters:
-
-    
-     
-      
-      
-      
-       
-        Specifies the host name of the machine on which the
-        server
-        is running.  If the value begins with a slash, it is used
-        as the directory for the Unix domain socket.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Specifies the TCP port or local Unix domain socket file
-        extension on which the server
-        is listening for connections.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        User name to connect as.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Never issue a password prompt.  If the server requires
-        password authentication and a password is not available by
-        other means such as a .pgpass file, the
-        connection attempt will fail.  This option can be useful in
-        batch jobs and scripts where no user is present to enter a
-        password.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Force createlang to prompt for a
-        password before connecting to a database.
-       
-
-       
-        This option is never essential, since
-        createlang will automatically prompt
-        for a password if the server demands password authentication.
-        However, createlang will waste a
-        connection attempt finding out that the server wants a password.
-        In some cases it is worth typing 
-        connection attempt.
-       
-      
-     
-
-    
-   
-
-
-  Environment
-
-  
-   
-    PGDATABASE
-    PGHOST
-    PGPORT
-    PGUSER
-
-    
-     
-      Default connection parameters
-     
-    
-   
-  
-
-  
-   This utility, like most other PostgreSQL utilities,
-   also uses the environment variables supported by libpq
-   (see ).
-  
-
-
-
-  Diagnostics
-
-   
-    Most error messages are self-explanatory. If not, run
-    createlang with the 
-    option and see the respective SQL command
-    for details.  Also, any default connection settings and environment
-    variables used by the libpq front-end
-    library will apply.
-   
-
-
-  Notes
-
-  
-   Use  to remove a language.
-  
-
-
-  Examples
-
-   
-    To install the language pltcl into the database
-    template1:
-
-createlang pltcl template1
-
-    Note that installing the language into template1
-    will cause it to be automatically installed into subsequently-created
-    databases as well.
-   
-
-  See Also
-
-  
-   
-   
-   
-  
-
-
index 0facc62876669f37bb42bd6bd7254ac2820865bf..f014a74d454c179adfc236bc2f6f76819c0714e7 100644 (file)
@@ -120,7 +120,6 @@ DROP LANGUAGE plsample;
   
    
    
-   
   
  
 
diff --git a/doc/src/sgml/ref/droplang.sgml b/doc/src/sgml/ref/droplang.sgml
deleted file mode 100644 (file)
index 86f05d6..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-
-
-
-  droplang
-
-  droplang
-  1
-  Application
-
-  droplang
-  remove a PostgreSQL procedural language
-
-  
-   droplang
-   connection-option
-   langname
-   dbname
-  
-
-  
-   droplang
-   connection-option
-   
-   dbname
-  
-
-  </div> <div class="diff rem">-   Description</div> <div class="diff rem">-  
-
-  
-   droplang is a utility for removing an
-   existing procedural language from a
-   PostgreSQL database.
-  
-
-  
-   droplang is just a wrapper around the
-    SQL command.
-  
-
-  
-   
-    droplang is deprecated and may be removed
-    in a future PostgreSQL release.  Direct use
-    of the DROP EXTENSION command is recommended instead.
-   
-  
-
-
-  Options
-
-   
-    droplang accepts the following command line arguments:
-
-    
-     
-      langname
-      
-       
-        Specifies the name of the procedural language to be removed.
-        (This name is lower-cased.)
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Specifies from which database the language should be removed.
-        The default is to use the database with the same name as the
-        current system user.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Display SQL commands as they are executed.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Show a list of already installed languages in the target database.
-       
-      
-     
-
-     
-       
-       
-       
-       
-       Print the droplang version and exit.
-       
-       
-     
-
-     
-       
-       
-       
-       
-       Show help about droplang command line
-       arguments, and exit.
-       
-       
-     
-
-    
-   
-
-   
-    droplang also accepts
-    the following command line arguments for connection parameters:
-
-    
-     
-      
-      
-      
-       
-        Specifies the host name of the machine on which the
-        server
-        is running.  If host begins with a slash, it is used
-        as the directory for the Unix domain socket.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Specifies the Internet TCP/IP port or local Unix domain socket file
-        extension on which the server
-        is listening for connections.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        User name to connect as.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Never issue a password prompt.  If the server requires
-        password authentication and a password is not available by
-        other means such as a .pgpass file, the
-        connection attempt will fail.  This option can be useful in
-        batch jobs and scripts where no user is present to enter a
-        password.
-       
-      
-     
-
-     
-      
-      
-      
-       
-        Force droplang to prompt for a
-        password before connecting to a database.
-       
-
-       
-        This option is never essential, since
-        droplang will automatically prompt
-        for a password if the server demands password authentication.
-        However, droplang will waste a
-        connection attempt finding out that the server wants a password.
-        In some cases it is worth typing 
-        connection attempt.
-       
-      
-     
-
-    
-   
-
-
-  Environment
-
-  
-   
-    PGDATABASE
-    PGHOST
-    PGPORT
-    PGUSER
-
-    
-     
-      Default connection parameters
-     
-    
-   
-  
-
-  
-   This utility, like most other PostgreSQL utilities,
-   also uses the environment variables supported by libpq
-   (see ).
-  
-
-
-
-   Diagnostics
-
-   
-    Most error messages are self-explanatory. If not, run
-    droplang with the 
-    option and see under the respective SQL command
-    for details.  Also, any default connection settings and environment
-    variables used by the libpq front-end
-    library will apply.
-   
-
-
-  Notes
-
-  
-   Use  to add a language.
-  
-
-
-  Examples
-
-   
-    To remove the language pltcl:
-
-droplang pltcl dbname
-
-
-  See Also
-
-  
-   
-   
-   
-  
-
-
index c8191de9fe305ae73b68da5c9c3d2df72fe386cb..3d8ad232fa3e5155d978b5a882782b9212d3f1d0 100644 (file)
 
    &clusterdb;
    &createdb;
-   &createlang;
    &createuser;
    &dropdb;
-   &droplang;
    &dropuser;
    &ecpgRef;
    &pgBasebackup;
index eb2d6ac2785f84ca644aedd3eb1124218603790a..2d0540c39e55b82105028be7ad3ab942e4f5f163 100644 (file)
@@ -10860,9 +10860,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
 
      
       
-        Mark 
-        linkend="APP-CREATELANG">createlang
-        and droplang
+        Mark createlang and droplang
         as deprecated now that they just invoke extension commands (Tom
         Lane)
       
index 9fa97d4c7052dfbe529fb56c288a3e9ee5bb8384..4460c8f3611b533b02059d5de34cf17432bfbbe2 100644 (file)
     For the languages supplied with the standard distribution, it is
     only necessary to execute CREATE EXTENSION
     language_name to install the language into the
-    current database.  Alternatively, the program 
-    linkend="app-createlang"> can be used to do this from the shell
-    command line.  For example, to install the language
-    PL/Perl into the database
-    template1, use:
-
-createlang plperl template1
-
+    current database.
     The manual procedure described below is only recommended for
     installing languages that have not been packaged as extensions.
    
index 40998d9670d07dac6cda50060faeead0e2ad5c27..0f23fe00045fce0d94d0459b3cb0cef2a98bb7e2 100644 (file)
@@ -1,9 +1,7 @@
 /clusterdb
 /createdb
-/createlang
 /createuser
 /dropdb
-/droplang
 /dropuser
 /reindexdb
 /vacuumdb
index 2f911e05bab35ec8fd0c909b77e4c89c3738073b..45ac492cfdeae5ae47545537f21fef8e1df3b8df 100644 (file)
@@ -16,7 +16,7 @@ subdir = src/bin/scripts
 top_builddir = ../../..
 include $(top_builddir)/src/Makefile.global
 
-PROGRAMS = createdb createlang createuser dropdb droplang dropuser clusterdb vacuumdb reindexdb pg_isready
+PROGRAMS = createdb createuser dropdb dropuser clusterdb vacuumdb reindexdb pg_isready
 
 override CPPFLAGS := -I$(libpq_srcdir) $(CPPFLAGS)
 LDFLAGS += -L$(top_builddir)/src/fe_utils -lpgfeutils -lpq
@@ -27,10 +27,8 @@ all: $(PROGRAMS)
    $(CC) $(CFLAGS) $^ $(libpq_pgport) $(LDFLAGS) $(LDFLAGS_EX) $(LIBS) -o $@$(X)
 
 createdb: createdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
-createlang: createlang.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
 createuser: createuser.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
 dropdb: dropdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
-droplang: droplang.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
 dropuser: dropuser.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
 clusterdb: clusterdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
 vacuumdb: vacuumdb.o common.o | submake-libpq submake-libpgport submake-libpgfeutils
@@ -40,8 +38,6 @@ pg_isready: pg_isready.o common.o | submake-libpq submake-libpgport submake-libp
 install: all installdirs
    $(INSTALL_PROGRAM) createdb$(X)   '$(DESTDIR)$(bindir)'/createdb$(X)
    $(INSTALL_PROGRAM) dropdb$(X)     '$(DESTDIR)$(bindir)'/dropdb$(X)
-   $(INSTALL_PROGRAM) createlang$(X) '$(DESTDIR)$(bindir)'/createlang$(X)
-   $(INSTALL_PROGRAM) droplang$(X)   '$(DESTDIR)$(bindir)'/droplang$(X)
    $(INSTALL_PROGRAM) createuser$(X) '$(DESTDIR)$(bindir)'/createuser$(X)
    $(INSTALL_PROGRAM) dropuser$(X)   '$(DESTDIR)$(bindir)'/dropuser$(X)
    $(INSTALL_PROGRAM) clusterdb$(X)  '$(DESTDIR)$(bindir)'/clusterdb$(X)
diff --git a/src/bin/scripts/createlang.c b/src/bin/scripts/createlang.c
deleted file mode 100644 (file)
index 5897bfe..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * createlang
- *
- * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/bin/scripts/createlang.c
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres_fe.h"
-
-#include "common.h"
-#include "fe_utils/print.h"
-
-static void help(const char *progname);
-
-
-int
-main(int argc, char *argv[])
-{
-   static struct option long_options[] = {
-       {"list", no_argument, NULL, 'l'},
-       {"host", required_argument, NULL, 'h'},
-       {"port", required_argument, NULL, 'p'},
-       {"username", required_argument, NULL, 'U'},
-       {"no-password", no_argument, NULL, 'w'},
-       {"password", no_argument, NULL, 'W'},
-       {"dbname", required_argument, NULL, 'd'},
-       {"echo", no_argument, NULL, 'e'},
-       {NULL, 0, NULL, 0}
-   };
-
-   const char *progname;
-   int         optindex;
-   int         c;
-
-   bool        listlangs = false;
-   const char *dbname = NULL;
-   char       *host = NULL;
-   char       *port = NULL;
-   char       *username = NULL;
-   enum trivalue prompt_password = TRI_DEFAULT;
-   bool        echo = false;
-   char       *langname = NULL;
-
-   char       *p;
-
-   PQExpBufferData sql;
-
-   PGconn     *conn;
-   PGresult   *result;
-
-   progname = get_progname(argv[0]);
-   set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
-
-   handle_help_version_opts(argc, argv, "createlang", help);
-
-   while ((c = getopt_long(argc, argv, "lh:p:U:wWd:e", long_options, &optindex)) != -1)
-   {
-       switch (c)
-       {
-           case 'l':
-               listlangs = true;
-               break;
-           case 'h':
-               host = pg_strdup(optarg);
-               break;
-           case 'p':
-               port = pg_strdup(optarg);
-               break;
-           case 'U':
-               username = pg_strdup(optarg);
-               break;
-           case 'w':
-               prompt_password = TRI_NO;
-               break;
-           case 'W':
-               prompt_password = TRI_YES;
-               break;
-           case 'd':
-               dbname = pg_strdup(optarg);
-               break;
-           case 'e':
-               echo = true;
-               break;
-           default:
-               fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-               exit(1);
-       }
-   }
-
-   /*
-    * We set dbname from positional arguments if it is not already set by
-    * option arguments -d. If not doing listlangs, positional dbname must
-    * follow positional langname.
-    */
-
-   if (argc - optind > 0)
-   {
-       if (listlangs)
-       {
-           if (dbname == NULL)
-               dbname = argv[optind++];
-       }
-       else
-       {
-           langname = argv[optind++];
-           if (argc - optind > 0 && dbname == NULL)
-               dbname = argv[optind++];
-       }
-   }
-
-   if (argc - optind > 0)
-   {
-       fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
-               progname, argv[optind]);
-       fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-       exit(1);
-   }
-
-   if (dbname == NULL)
-   {
-       if (getenv("PGDATABASE"))
-           dbname = getenv("PGDATABASE");
-       else if (getenv("PGUSER"))
-           dbname = getenv("PGUSER");
-       else
-           dbname = get_user_name_or_exit(progname);
-   }
-
-   initPQExpBuffer(&sql);
-
-   /*
-    * List option
-    */
-   if (listlangs)
-   {
-       printQueryOpt popt;
-       static const bool translate_columns[] = {false, true};
-
-       conn = connectDatabase(dbname, host, port, username, prompt_password,
-                              progname, false, false);
-
-       printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
-               "(CASE WHEN lanpltrusted THEN '%s' ELSE '%s' END) as \"%s\" "
-                         "FROM pg_catalog.pg_language WHERE lanispl;",
-                         gettext_noop("Name"),
-                         gettext_noop("yes"), gettext_noop("no"),
-                         gettext_noop("Trusted?"));
-       result = executeQuery(conn, sql.data, progname, echo);
-
-       memset(&popt, 0, sizeof(popt));
-       popt.topt.format = PRINT_ALIGNED;
-       popt.topt.border = 1;
-       popt.topt.start_table = true;
-       popt.topt.stop_table = true;
-       popt.topt.encoding = PQclientEncoding(conn);
-       popt.title = _("Procedural Languages");
-       popt.translate_header = true;
-       popt.translate_columns = translate_columns;
-       popt.n_translate_columns = lengthof(translate_columns);
-
-       printQuery(result, &popt, stdout, false, NULL);
-
-       PQfinish(conn);
-       exit(0);
-   }
-
-   if (langname == NULL)
-   {
-       fprintf(stderr, _("%s: missing required argument language name\n"), progname);
-       fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-       exit(1);
-   }
-
-   /* lower case language name */
-   for (p = langname; *p; p++)
-       if (*p >= 'A' && *p <= 'Z')
-           *p += ('a' - 'A');
-
-   conn = connectDatabase(dbname, host, port, username, prompt_password,
-                          progname, false, false);
-
-   /*
-    * Make sure the language isn't already installed
-    */
-   printfPQExpBuffer(&sql,
-             "SELECT oid FROM pg_catalog.pg_language WHERE lanname = '%s';",
-                     langname);
-   result = executeQuery(conn, sql.data, progname, echo);
-   if (PQntuples(result) > 0)
-   {
-       fprintf(stderr,
-         _("%s: language \"%s\" is already installed in database \"%s\"\n"),
-               progname, langname, PQdb(conn));
-       PQfinish(conn);
-       /* separate exit status for "already installed" */
-       exit(2);
-   }
-   PQclear(result);
-
-   /*
-    * In 9.1 and up, assume that languages should be installed using CREATE
-    * EXTENSION.  However, it's possible this tool could be used against an
-    * older server, and it's easy enough to continue supporting the old way.
-    */
-   if (PQserverVersion(conn) >= 90100)
-       printfPQExpBuffer(&sql, "CREATE EXTENSION \"%s\";", langname);
-   else
-       printfPQExpBuffer(&sql, "CREATE LANGUAGE \"%s\";", langname);
-
-   if (echo)
-       printf("%s\n", sql.data);
-   result = PQexec(conn, sql.data);
-   if (PQresultStatus(result) != PGRES_COMMAND_OK)
-   {
-       fprintf(stderr, _("%s: language installation failed: %s"),
-               progname, PQerrorMessage(conn));
-       PQfinish(conn);
-       exit(1);
-   }
-
-   PQclear(result);
-   PQfinish(conn);
-   exit(0);
-}
-
-
-
-static void
-help(const char *progname)
-{
-   printf(_("%s installs a procedural language into a PostgreSQL database.\n\n"), progname);
-   printf(_("Usage:\n"));
-   printf(_("  %s [OPTION]... LANGNAME [DBNAME]\n"), progname);
-   printf(_("\nOptions:\n"));
-   printf(_("  -d, --dbname=DBNAME       database to install language in\n"));
-   printf(_("  -e, --echo                show the commands being sent to the server\n"));
-   printf(_("  -l, --list                show a list of currently installed languages\n"));
-   printf(_("  -V, --version             output version information, then exit\n"));
-   printf(_("  -?, --help                show this help, then exit\n"));
-   printf(_("\nConnection options:\n"));
-   printf(_("  -h, --host=HOSTNAME       database server host or socket directory\n"));
-   printf(_("  -p, --port=PORT           database server port\n"));
-   printf(_("  -U, --username=USERNAME   user name to connect as\n"));
-   printf(_("  -w, --no-password         never prompt for password\n"));
-   printf(_("  -W, --password            force password prompt\n"));
-   printf(_("\nReport bugs to .\n"));
-}
diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
deleted file mode 100644 (file)
index 97d1de4..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-/*-------------------------------------------------------------------------
- *
- * droplang
- *
- * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
- * Portions Copyright (c) 1994, Regents of the University of California
- *
- * src/bin/scripts/droplang.c
- *
- *-------------------------------------------------------------------------
- */
-#include "postgres_fe.h"
-
-#include "common.h"
-#include "fe_utils/print.h"
-
-
-static void help(const char *progname);
-
-
-int
-main(int argc, char *argv[])
-{
-   static struct option long_options[] = {
-       {"list", no_argument, NULL, 'l'},
-       {"host", required_argument, NULL, 'h'},
-       {"port", required_argument, NULL, 'p'},
-       {"username", required_argument, NULL, 'U'},
-       {"no-password", no_argument, NULL, 'w'},
-       {"password", no_argument, NULL, 'W'},
-       {"dbname", required_argument, NULL, 'd'},
-       {"echo", no_argument, NULL, 'e'},
-       {NULL, 0, NULL, 0}
-   };
-
-   const char *progname;
-   int         optindex;
-   int         c;
-   bool        listlangs = false;
-   const char *dbname = NULL;
-   char       *host = NULL;
-   char       *port = NULL;
-   char       *username = NULL;
-   enum trivalue prompt_password = TRI_DEFAULT;
-   bool        echo = false;
-   char       *langname = NULL;
-   char       *p;
-   PQExpBufferData sql;
-   PGconn     *conn;
-   PGresult   *result;
-
-   progname = get_progname(argv[0]);
-   set_pglocale_pgservice(argv[0], PG_TEXTDOMAIN("pgscripts"));
-
-   handle_help_version_opts(argc, argv, "droplang", help);
-
-   while ((c = getopt_long(argc, argv, "lh:p:U:wWd:e", long_options, &optindex)) != -1)
-   {
-       switch (c)
-       {
-           case 'l':
-               listlangs = true;
-               break;
-           case 'h':
-               host = pg_strdup(optarg);
-               break;
-           case 'p':
-               port = pg_strdup(optarg);
-               break;
-           case 'U':
-               username = pg_strdup(optarg);
-               break;
-           case 'w':
-               prompt_password = TRI_NO;
-               break;
-           case 'W':
-               prompt_password = TRI_YES;
-               break;
-           case 'd':
-               dbname = pg_strdup(optarg);
-               break;
-           case 'e':
-               echo = true;
-               break;
-           default:
-               fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-               exit(1);
-       }
-   }
-
-   /*
-    * We set dbname from positional arguments if it is not already set by
-    * option arguments -d. If not doing listlangs, positional dbname must
-    * follow positional langname.
-    */
-
-   if (argc - optind > 0)
-   {
-       if (listlangs)
-       {
-           if (dbname == NULL)
-               dbname = argv[optind++];
-       }
-       else
-       {
-           langname = argv[optind++];
-           if (argc - optind > 0 && dbname == NULL)
-               dbname = argv[optind++];
-       }
-   }
-
-   if (argc - optind > 0)
-   {
-       fprintf(stderr, _("%s: too many command-line arguments (first is \"%s\")\n"),
-               progname, argv[optind]);
-       fprintf(stderr, _("Try \"%s --help\" for more information.\n"), progname);
-       exit(1);
-   }
-
-   if (dbname == NULL)
-   {
-       if (getenv("PGDATABASE"))
-           dbname = getenv("PGDATABASE");
-       else if (getenv("PGUSER"))
-           dbname = getenv("PGUSER");
-       else
-           dbname = get_user_name_or_exit(progname);
-   }
-
-   initPQExpBuffer(&sql);
-
-   /*
-    * List option
-    */
-   if (listlangs)
-   {
-       printQueryOpt popt;
-       static const bool translate_columns[] = {false, true};
-
-       conn = connectDatabase(dbname, host, port, username, prompt_password,
-                              progname, false, false);
-
-       printfPQExpBuffer(&sql, "SELECT lanname as \"%s\", "
-               "(CASE WHEN lanpltrusted THEN '%s' ELSE '%s' END) as \"%s\" "
-                         "FROM pg_catalog.pg_language WHERE lanispl;",
-                         gettext_noop("Name"),
-                         gettext_noop("yes"), gettext_noop("no"),
-                         gettext_noop("Trusted?"));
-       result = executeQuery(conn, sql.data, progname, echo);
-
-       memset(&popt, 0, sizeof(popt));
-       popt.topt.format = PRINT_ALIGNED;
-       popt.topt.border = 1;
-       popt.topt.start_table = true;
-       popt.topt.stop_table = true;
-       popt.topt.encoding = PQclientEncoding(conn);
-       popt.title = _("Procedural Languages");
-       popt.translate_header = true;
-       popt.translate_columns = translate_columns;
-       popt.n_translate_columns = lengthof(translate_columns);
-
-       printQuery(result, &popt, stdout, false, NULL);
-
-       PQfinish(conn);
-       exit(0);
-   }
-
-   if (langname == NULL)
-   {
-       fprintf(stderr, _("%s: missing required argument language name\n"),
-               progname);
-       fprintf(stderr, _("Try \"%s --help\" for more information.\n"),
-               progname);
-       exit(1);
-   }
-
-   /* lower case language name */
-   for (p = langname; *p; p++)
-       if (*p >= 'A' && *p <= 'Z')
-           *p += ('a' - 'A');
-
-   conn = connectDatabase(dbname, host, port, username, prompt_password,
-                          progname, false, false);
-
-   /*
-    * Force schema search path to be just pg_catalog, so that we don't have
-    * to be paranoid about search paths below.
-    */
-   executeCommand(conn, "SET search_path = pg_catalog;", progname, echo);
-
-   /*
-    * Make sure the language is installed
-    */
-   printfPQExpBuffer(&sql, "SELECT oid "
-                     "FROM pg_language WHERE lanname = '%s' AND lanispl;",
-                     langname);
-   result = executeQuery(conn, sql.data, progname, echo);
-   if (PQntuples(result) == 0)
-   {
-       fprintf(stderr, _("%s: language \"%s\" is not installed in "
-                         "database \"%s\"\n"),
-               progname, langname, PQdb(conn));
-       PQfinish(conn);
-       exit(1);
-   }
-   PQclear(result);
-
-   /*
-    * Attempt to drop the language.  We do not use CASCADE, so that the drop
-    * will fail if there are any functions in the language.
-    */
-   printfPQExpBuffer(&sql, "DROP EXTENSION \"%s\";", langname);
-
-   if (echo)
-       printf("%s\n", sql.data);
-   result = PQexec(conn, sql.data);
-   if (PQresultStatus(result) != PGRES_COMMAND_OK)
-   {
-       fprintf(stderr, _("%s: language removal failed: %s"),
-               progname, PQerrorMessage(conn));
-       PQfinish(conn);
-       exit(1);
-   }
-
-   PQclear(result);
-   PQfinish(conn);
-   exit(0);
-}
-
-
-static void
-help(const char *progname)
-{
-   printf(_("%s removes a procedural language from a database.\n\n"), progname);
-   printf(_("Usage:\n"));
-   printf(_("  %s [OPTION]... LANGNAME [DBNAME]\n"), progname);
-   printf(_("\nOptions:\n"));
-   printf(_("  -d, --dbname=DBNAME       database from which to remove the language\n"));
-   printf(_("  -e, --echo                show the commands being sent to the server\n"));
-   printf(_("  -l, --list                show a list of currently installed languages\n"));
-   printf(_("  -V, --version             output version information, then exit\n"));
-   printf(_("  -?, --help                show this help, then exit\n"));
-   printf(_("\nConnection options:\n"));
-   printf(_("  -h, --host=HOSTNAME       database server host or socket directory\n"));
-   printf(_("  -p, --port=PORT           database server port\n"));
-   printf(_("  -U, --username=USERNAME   user name to connect as\n"));
-   printf(_("  -w, --no-password         never prompt for password\n"));
-   printf(_("  -W, --password            force password prompt\n"));
-   printf(_("\nReport bugs to .\n"));
-}
index 9156d08a80eb32d3044b729d9c0de426fde57964..ef64083f5f2c138668f33696ba5bb0fdb8c1f07e 100644 (file)
@@ -1,8 +1,8 @@
 # src/bin/scripts/nls.mk
 CATALOG_NAME     = pgscripts
 AVAIL_LANGUAGES  = cs de es fr it ja ko pl pt_BR ru sv zh_CN
-GETTEXT_FILES    = createdb.c createlang.c createuser.c \
-                   dropdb.c droplang.c dropuser.c \
+GETTEXT_FILES    = createdb.c createuser.c \
+                   dropdb.c dropuser.c \
                    clusterdb.c vacuumdb.c reindexdb.c \
                    pg_isready.c \
                    common.c \
diff --git a/src/bin/scripts/t/030_createlang.pl b/src/bin/scripts/t/030_createlang.pl
deleted file mode 100644 (file)
index ffbd35d..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-use strict;
-use warnings;
-
-use PostgresNode;
-use TestLib;
-use Test::More tests => 14;
-
-program_help_ok('createlang');
-program_version_ok('createlang');
-program_options_handling_ok('createlang');
-
-my $node = get_new_node('main');
-$node->init;
-$node->start;
-
-$node->command_fails([ 'createlang', 'plpgsql' ],
-   'fails if language already exists');
-
-$node->safe_psql('postgres', 'DROP EXTENSION plpgsql');
-$node->issues_sql_like(
-   [ 'createlang', 'plpgsql' ],
-   qr/statement: CREATE EXTENSION "plpgsql"/,
-   'SQL CREATE EXTENSION run');
-
-$node->command_like([ 'createlang', '--list' ], qr/plpgsql/, 'list output');
diff --git a/src/bin/scripts/t/060_droplang.pl b/src/bin/scripts/t/060_droplang.pl
deleted file mode 100644 (file)
index 904cea2..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-use strict;
-use warnings;
-
-use PostgresNode;
-use TestLib;
-use Test::More tests => 11;
-
-program_help_ok('droplang');
-program_version_ok('droplang');
-program_options_handling_ok('droplang');
-
-my $node = get_new_node('main');
-$node->init;
-$node->start;
-
-$node->issues_sql_like(
-   [ 'droplang', 'plpgsql', 'postgres' ],
-   qr/statement: DROP EXTENSION "plpgsql"/,
-   'SQL DROP EXTENSION run');
-
-$node->command_fails(
-   [ 'droplang', 'nonexistent', 'postgres' ],
-   'fails with nonexistent language');
index 0aa1422b9fb81abaf4e1c149336c3d9598868b80..b81f4dd809c9495f5711cb1f37a9d06057d5c845 100644 (file)
@@ -20,8 +20,8 @@ our (@ISA, @EXPORT_OK);
 my $insttype;
 my @client_contribs = ('oid2name', 'pgbench', 'vacuumlo');
 my @client_program_files = (
-   'clusterdb',     'createdb',       'createlang', 'createuser',
-   'dropdb',        'droplang',       'dropuser',   'ecpg',
+   'clusterdb',     'createdb',       'createuser',
+   'dropdb',        'dropuser',       'ecpg',
    'libecpg',       'libecpg_compat', 'libpgtypes', 'libpq',
    'pg_basebackup', 'pg_config',      'pg_dump',    'pg_dumpall',
    'pg_isready',    'pg_receivewal', 'pg_recvlogical', 'pg_restore',