summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Eisentraut <peter_e@gmx.net>2017-03-23 14:16:45 -0400
committerPeter Eisentraut <peter_e@gmx.net>2017-03-23 14:16:45 -0400
commit50c956add83963d7bbb367dd0b879fccddebd623 (patch)
tree8085aa18ddd62a0e09e51f63087d1f2fd264e943
parent691b8d59281b5177f16fe80858df921f77a8e955 (diff)
downloadpostgresql-50c956add83963d7bbb367dd0b879fccddebd623.tar.gz
Remove createlang and droplang
They have been deprecated since PostgreSQL 9.1. Reviewed-by: Magnus Hagander <magnus@hagander.net> Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
-rw-r--r--doc/src/sgml/installation.sgml12
-rw-r--r--doc/src/sgml/plperl.sgml3
-rw-r--r--doc/src/sgml/plpython.sgml3
-rw-r--r--doc/src/sgml/pltcl.sgml7
-rw-r--r--doc/src/sgml/ref/allfiles.sgml2
-rw-r--r--doc/src/sgml/ref/create_function.sgml1
-rw-r--r--doc/src/sgml/ref/create_language.sgml15
-rw-r--r--doc/src/sgml/ref/createlang.sgml291
-rw-r--r--doc/src/sgml/ref/drop_language.sgml1
-rw-r--r--doc/src/sgml/ref/droplang.sgml288
-rw-r--r--doc/src/sgml/reference.sgml2
-rw-r--r--doc/src/sgml/release-9.1.sgml4
-rw-r--r--doc/src/sgml/xplang.sgml9
-rw-r--r--src/bin/scripts/.gitignore2
-rw-r--r--src/bin/scripts/Makefile6
-rw-r--r--src/bin/scripts/createlang.c251
-rw-r--r--src/bin/scripts/droplang.c250
-rw-r--r--src/bin/scripts/nls.mk4
-rw-r--r--src/bin/scripts/t/030_createlang.pl25
-rw-r--r--src/bin/scripts/t/060_droplang.pl23
-rw-r--r--src/tools/msvc/Install.pm4
21 files changed, 21 insertions, 1182 deletions
diff --git a/doc/src/sgml/installation.sgml b/doc/src/sgml/installation.sgml
index 79201b78e3..f8a222e637 100644
--- a/doc/src/sgml/installation.sgml
+++ b/doc/src/sgml/installation.sgml
@@ -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 <command>createlang</command> failing with unusual errors.
+ is loading of extensions failing with unusual errors.
For example, running as the owner of the PostgreSQL installation:
<screen>
--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.
</screen>
Running as a non-owner in the group possessing the PostgreSQL
installation:
<screen>
--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
</screen>
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
</para>
<para>
- In the case of the <command>createlang</command> example, above,
+ In the case of the <literal>plperl</literal> 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
diff --git a/doc/src/sgml/plperl.sgml b/doc/src/sgml/plperl.sgml
index 9117769125..dd2ffbc6ce 100644
--- a/doc/src/sgml/plperl.sgml
+++ b/doc/src/sgml/plperl.sgml
@@ -27,8 +27,7 @@
<para>
To install PL/Perl in a particular database, use
- <literal>CREATE EXTENSION plperl</>, or from the shell command line use
- <literal>createlang plperl <replaceable>dbname</></literal>.
+ <literal>CREATE EXTENSION plperl</>.
</para>
<tip>
diff --git a/doc/src/sgml/plpython.sgml b/doc/src/sgml/plpython.sgml
index 46397781be..fb5d336efc 100644
--- a/doc/src/sgml/plpython.sgml
+++ b/doc/src/sgml/plpython.sgml
@@ -14,8 +14,7 @@
<para>
To install PL/Python in a particular database, use
- <literal>CREATE EXTENSION plpythonu</>, or from the shell command line use
- <literal>createlang plpythonu <replaceable>dbname</></literal> (but
+ <literal>CREATE EXTENSION plpythonu</> (but
see also <xref linkend="plpython-python23">).
</para>
diff --git a/doc/src/sgml/pltcl.sgml b/doc/src/sgml/pltcl.sgml
index ed745a7481..ba4af2aec5 100644
--- a/doc/src/sgml/pltcl.sgml
+++ b/doc/src/sgml/pltcl.sgml
@@ -66,10 +66,9 @@
directory if Tcl support is specified in the configuration step of
the installation procedure. To install <application>PL/Tcl</>
and/or <application>PL/TclU</> in a particular database, use the
- <command>CREATE EXTENSION</> command or the
- <command>createlang</command> program, for example
- <literal>createlang pltcl <replaceable>dbname</></literal> or
- <literal>createlang pltclu <replaceable>dbname</></literal>.
+ <command>CREATE EXTENSION</> command, for example
+ <literal>CREATE EXTENSION pltcl</literal> or
+ <literal>CREATE EXTENSION pltclu</literal>.
</para>
</sect1>
diff --git a/doc/src/sgml/ref/allfiles.sgml b/doc/src/sgml/ref/allfiles.sgml
index 2bc4d9fd64..974e1b74e4 100644
--- a/doc/src/sgml/ref/allfiles.sgml
+++ b/doc/src/sgml/ref/allfiles.sgml
@@ -182,10 +182,8 @@ Complete list of usable sgml source files in this directory.
<!-- applications and utilities -->
<!ENTITY clusterdb SYSTEM "clusterdb.sgml">
<!ENTITY createdb SYSTEM "createdb.sgml">
-<!ENTITY createlang SYSTEM "createlang.sgml">
<!ENTITY createuser SYSTEM "createuser.sgml">
<!ENTITY dropdb SYSTEM "dropdb.sgml">
-<!ENTITY droplang SYSTEM "droplang.sgml">
<!ENTITY dropuser SYSTEM "dropuser.sgml">
<!ENTITY ecpgRef SYSTEM "ecpg-ref.sgml">
<!ENTITY initdb SYSTEM "initdb.sgml">
diff --git a/doc/src/sgml/ref/create_function.sgml b/doc/src/sgml/ref/create_function.sgml
index 9d0d2f4beb..3f86141f80 100644
--- a/doc/src/sgml/ref/create_function.sgml
+++ b/doc/src/sgml/ref/create_function.sgml
@@ -847,7 +847,6 @@ COMMIT;
<member><xref linkend="sql-grant"></member>
<member><xref linkend="sql-load"></member>
<member><xref linkend="sql-revoke"></member>
- <member><xref linkend="app-createlang"></member>
</simplelist>
</refsect1>
diff --git a/doc/src/sgml/ref/create_language.sgml b/doc/src/sgml/ref/create_language.sgml
index 41da16d977..75165b677f 100644
--- a/doc/src/sgml/ref/create_language.sgml
+++ b/doc/src/sgml/ref/create_language.sgml
@@ -230,21 +230,14 @@ CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <replaceable class="pa
<title>Notes</title>
<para>
- The <xref linkend="app-createlang"> program is a simple wrapper around
- the <command>CREATE LANGUAGE</> command. It eases
- installation of procedural languages from the shell command line.
- </para>
-
- <para>
- Use <xref linkend="sql-droplanguage">, or better yet the <xref
- linkend="app-droplang"> program, to drop procedural languages.
+ Use <xref linkend="sql-droplanguage"> to drop procedural languages.
</para>
<para>
The system catalog <classname>pg_language</classname> (see <xref
linkend="catalog-pg-language">) records information about the
- currently installed languages. Also, <command>createlang</command>
- has an option to list the installed languages.
+ currently installed languages. Also, the <application>psql</application>
+ command <command>\dL</command> lists the installed languages.
</para>
<para>
@@ -325,8 +318,6 @@ CREATE LANGUAGE plsample
<member><xref linkend="sql-droplanguage"></member>
<member><xref linkend="sql-grant"></member>
<member><xref linkend="sql-revoke"></member>
- <member><xref linkend="app-createlang"></member>
- <member><xref linkend="app-droplang"></member>
</simplelist>
</refsect1>
</refentry>
diff --git a/doc/src/sgml/ref/createlang.sgml b/doc/src/sgml/ref/createlang.sgml
deleted file mode 100644
index e9c95d3278..0000000000
--- a/doc/src/sgml/ref/createlang.sgml
+++ /dev/null
@@ -1,291 +0,0 @@
-<!--
-doc/src/sgml/ref/createlang.sgml
-PostgreSQL documentation
--->
-
-<refentry id="APP-CREATELANG">
- <indexterm zone="app-createlang">
- <primary>createlang</primary>
- </indexterm>
-
- <refmeta>
- <refentrytitle><application>createlang</application></refentrytitle>
- <manvolnum>1</manvolnum>
- <refmiscinfo>Application</refmiscinfo>
- </refmeta>
-
- <refnamediv>
- <refname>createlang</refname>
- <refpurpose>install a <productname>PostgreSQL</productname> procedural language</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>createlang</command>
- <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
- <arg choice="plain"><replaceable>langname</replaceable></arg>
- <arg choice="opt"><replaceable>dbname</replaceable></arg>
- </cmdsynopsis>
-
- <cmdsynopsis>
- <command>createlang</command>
- <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
- <group choice="plain"><arg choice="plain"><option>--list</option></arg><arg choice="plain"><option>-l</option></arg></group>
- <arg choice="opt"><replaceable>dbname</replaceable></arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
-
- <refsect1>
- <title>Description</title>
-
- <para>
- <application>createlang</application> is a utility for adding a
- procedural language to a <productname>PostgreSQL</productname> database.
- </para>
-
- <para>
- <application>createlang</application> is just a wrapper around the
- <xref linkend="sql-createextension"> SQL command.
- </para>
-
- <caution>
- <para>
- <application>createlang</application> is deprecated and may be removed
- in a future <productname>PostgreSQL</productname> release. Direct use
- of the <command>CREATE EXTENSION</> command is recommended instead.
- </para>
- </caution>
- </refsect1>
-
-
- <refsect1>
- <title>Options</title>
-
- <para>
- <application>createlang</application> accepts the following command-line arguments:
-
- <variablelist>
- <varlistentry>
- <term><replaceable class="parameter">langname</replaceable></term>
- <listitem>
- <para>
- Specifies the name of the procedural language to be
- installed. (This name is lower-cased.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option><optional>-d</> <replaceable class="parameter">dbname</replaceable></></term>
- <term><option><optional>--dbname=</><replaceable class="parameter">dbname</replaceable></></term>
- <listitem>
- <para>
- 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-e</></term>
- <term><option>--echo</></term>
- <listitem>
- <para>
- Display SQL commands as they are executed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-l</></term>
- <term><option>--list</></term>
- <listitem>
- <para>
- Show a list of already installed languages in the target database.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-V</></term>
- <term><option>--version</></term>
- <listitem>
- <para>
- Print the <application>createlang</application> version and exit.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-?</></term>
- <term><option>--help</></term>
- <listitem>
- <para>
- Show help about <application>createlang</application> command line
- arguments, and exit.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
-
- <para>
- <application>createlang</application> also accepts
- the following command-line arguments for connection parameters:
-
- <variablelist>
- <varlistentry>
- <term><option>-h <replaceable class="parameter">host</replaceable></></term>
- <term><option>--host=<replaceable class="parameter">host</replaceable></></term>
- <listitem>
- <para>
- 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-p <replaceable class="parameter">port</replaceable></></term>
- <term><option>--port=<replaceable class="parameter">port</replaceable></></term>
- <listitem>
- <para>
- Specifies the TCP port or local Unix domain socket file
- extension on which the server
- is listening for connections.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-U <replaceable class="parameter">username</replaceable></></term>
- <term><option>--username=<replaceable class="parameter">username</replaceable></></term>
- <listitem>
- <para>
- User name to connect as.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-w</></term>
- <term><option>--no-password</></term>
- <listitem>
- <para>
- Never issue a password prompt. If the server requires
- password authentication and a password is not available by
- other means such as a <filename>.pgpass</filename> 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-W</></term>
- <term><option>--password</></term>
- <listitem>
- <para>
- Force <application>createlang</application> to prompt for a
- password before connecting to a database.
- </para>
-
- <para>
- This option is never essential, since
- <application>createlang</application> will automatically prompt
- for a password if the server demands password authentication.
- However, <application>createlang</application> will waste a
- connection attempt finding out that the server wants a password.
- In some cases it is worth typing <option>-W</> to avoid the extra
- connection attempt.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Environment</title>
-
- <variablelist>
- <varlistentry>
- <term><envar>PGDATABASE</envar></term>
- <term><envar>PGHOST</envar></term>
- <term><envar>PGPORT</envar></term>
- <term><envar>PGUSER</envar></term>
-
- <listitem>
- <para>
- Default connection parameters
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- This utility, like most other <productname>PostgreSQL</> utilities,
- also uses the environment variables supported by <application>libpq</>
- (see <xref linkend="libpq-envars">).
- </para>
-
- </refsect1>
-
-
- <refsect1>
- <title>Diagnostics</title>
-
- <para>
- Most error messages are self-explanatory. If not, run
- <application>createlang</application> with the <option>--echo</option>
- option and see the respective <acronym>SQL</acronym> command
- for details. Also, any default connection settings and environment
- variables used by the <application>libpq</application> front-end
- library will apply.
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Notes</title>
-
- <para>
- Use <xref linkend="app-droplang"> to remove a language.
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Examples</title>
-
- <para>
- To install the language <literal>pltcl</literal> into the database
- <literal>template1</literal>:
-<screen>
-<prompt>$ </prompt><userinput>createlang pltcl template1</userinput>
-</screen>
- Note that installing the language into <literal>template1</literal>
- will cause it to be automatically installed into subsequently-created
- databases as well.
- </para>
- </refsect1>
-
- <refsect1>
- <title>See Also</title>
-
- <simplelist type="inline">
- <member><xref linkend="app-droplang"></member>
- <member><xref linkend="sql-createextension"></member>
- <member><xref linkend="sql-createlanguage"></member>
- </simplelist>
- </refsect1>
-
-</refentry>
diff --git a/doc/src/sgml/ref/drop_language.sgml b/doc/src/sgml/ref/drop_language.sgml
index 0facc62876..f014a74d45 100644
--- a/doc/src/sgml/ref/drop_language.sgml
+++ b/doc/src/sgml/ref/drop_language.sgml
@@ -120,7 +120,6 @@ DROP LANGUAGE plsample;
<simplelist type="inline">
<member><xref linkend="sql-alterlanguage"></member>
<member><xref linkend="sql-createlanguage"></member>
- <member><xref linkend="app-droplang"></member>
</simplelist>
</refsect1>
diff --git a/doc/src/sgml/ref/droplang.sgml b/doc/src/sgml/ref/droplang.sgml
deleted file mode 100644
index 86f05d6b05..0000000000
--- a/doc/src/sgml/ref/droplang.sgml
+++ /dev/null
@@ -1,288 +0,0 @@
-<!--
-doc/src/sgml/ref/droplang.sgml
-PostgreSQL documentation
--->
-
-<refentry id="APP-DROPLANG">
- <indexterm zone="app-droplang">
- <primary>droplang</primary>
- </indexterm>
-
- <refmeta>
- <refentrytitle><application>droplang</application></refentrytitle>
- <manvolnum>1</manvolnum>
- <refmiscinfo>Application</refmiscinfo>
- </refmeta>
-
- <refnamediv>
- <refname>droplang</refname>
- <refpurpose>remove a <productname>PostgreSQL</productname> procedural language</refpurpose>
- </refnamediv>
-
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>droplang</command>
- <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
- <arg choice="plain"><replaceable>langname</replaceable></arg>
- <arg choice="opt"><replaceable>dbname</replaceable></arg>
- </cmdsynopsis>
-
- <cmdsynopsis>
- <command>droplang</command>
- <arg rep="repeat"><replaceable>connection-option</replaceable></arg>
- <group choice="plain"><arg choice="plain"><option>--list</option></arg><arg choice="plain"><option>-l</option></arg></group>
- <arg choice="opt"><replaceable>dbname</replaceable></arg>
- </cmdsynopsis>
- </refsynopsisdiv>
-
- <refsect1 id="R1-APP-DROPLANG-1">
- <title>
- Description
- </title>
-
- <para>
- <application>droplang</application> is a utility for removing an
- existing procedural language from a
- <productname>PostgreSQL</productname> database.
- </para>
-
- <para>
- <application>droplang</application> is just a wrapper around the
- <xref linkend="sql-dropextension"> SQL command.
- </para>
-
- <caution>
- <para>
- <application>droplang</application> is deprecated and may be removed
- in a future <productname>PostgreSQL</productname> release. Direct use
- of the <command>DROP EXTENSION</> command is recommended instead.
- </para>
- </caution>
- </refsect1>
-
-
- <refsect1>
- <title>Options</title>
-
- <para>
- <application>droplang</application> accepts the following command line arguments:
-
- <variablelist>
- <varlistentry>
- <term><replaceable class="parameter">langname</replaceable></term>
- <listitem>
- <para>
- Specifies the name of the procedural language to be removed.
- (This name is lower-cased.)
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option><optional>-d</> <replaceable class="parameter">dbname</replaceable></></term>
- <term><option><optional>--dbname=</><replaceable class="parameter">dbname</replaceable></></term>
- <listitem>
- <para>
- 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-e</></term>
- <term><option>--echo</></term>
- <listitem>
- <para>
- Display SQL commands as they are executed.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-l</></term>
- <term><option>--list</></term>
- <listitem>
- <para>
- Show a list of already installed languages in the target database.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-V</></term>
- <term><option>--version</></term>
- <listitem>
- <para>
- Print the <application>droplang</application> version and exit.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-?</></term>
- <term><option>--help</></term>
- <listitem>
- <para>
- Show help about <application>droplang</application> command line
- arguments, and exit.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
-
- <para>
- <application>droplang</application> also accepts
- the following command line arguments for connection parameters:
-
- <variablelist>
- <varlistentry>
- <term><option>-h <replaceable class="parameter">host</replaceable></></term>
- <term><option>--host=<replaceable class="parameter">host</replaceable></></term>
- <listitem>
- <para>
- 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-p <replaceable class="parameter">port</replaceable></></term>
- <term><option>--port=<replaceable class="parameter">port</replaceable></></term>
- <listitem>
- <para>
- Specifies the Internet TCP/IP port or local Unix domain socket file
- extension on which the server
- is listening for connections.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-U <replaceable class="parameter">username</replaceable></></term>
- <term><option>--username=<replaceable class="parameter">username</replaceable></></term>
- <listitem>
- <para>
- User name to connect as.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-w</></term>
- <term><option>--no-password</></term>
- <listitem>
- <para>
- Never issue a password prompt. If the server requires
- password authentication and a password is not available by
- other means such as a <filename>.pgpass</filename> 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.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>-W</></term>
- <term><option>--password</></term>
- <listitem>
- <para>
- Force <application>droplang</application> to prompt for a
- password before connecting to a database.
- </para>
-
- <para>
- This option is never essential, since
- <application>droplang</application> will automatically prompt
- for a password if the server demands password authentication.
- However, <application>droplang</application> will waste a
- connection attempt finding out that the server wants a password.
- In some cases it is worth typing <option>-W</> to avoid the extra
- connection attempt.
- </para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Environment</title>
-
- <variablelist>
- <varlistentry>
- <term><envar>PGDATABASE</envar></term>
- <term><envar>PGHOST</envar></term>
- <term><envar>PGPORT</envar></term>
- <term><envar>PGUSER</envar></term>
-
- <listitem>
- <para>
- Default connection parameters
- </para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>
- This utility, like most other <productname>PostgreSQL</> utilities,
- also uses the environment variables supported by <application>libpq</>
- (see <xref linkend="libpq-envars">).
- </para>
-
- </refsect1>
-
-
- <refsect1>
- <title>Diagnostics</title>
-
- <para>
- Most error messages are self-explanatory. If not, run
- <application>droplang</application> with the <option>--echo</option>
- option and see under the respective <acronym>SQL</acronym> command
- for details. Also, any default connection settings and environment
- variables used by the <application>libpq</application> front-end
- library will apply.
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Notes</title>
-
- <para>
- Use <xref linkend="app-createlang"> to add a language.
- </para>
- </refsect1>
-
-
- <refsect1>
- <title>Examples</title>
-
- <para>
- To remove the language <literal>pltcl</literal>:
-<screen>
-<prompt>$ </prompt><userinput>droplang pltcl dbname</userinput>
-</screen></para>
- </refsect1>
-
- <refsect1>
- <title>See Also</title>
-
- <simplelist type="inline">
- <member><xref linkend="app-createlang"></member>
- <member><xref linkend="sql-dropextension"></member>
- <member><xref linkend="sql-droplanguage"></member>
- </simplelist>
- </refsect1>
-
-</refentry>
diff --git a/doc/src/sgml/reference.sgml b/doc/src/sgml/reference.sgml
index c8191de9fe..3d8ad232fa 100644
--- a/doc/src/sgml/reference.sgml
+++ b/doc/src/sgml/reference.sgml
@@ -233,10 +233,8 @@
&clusterdb;
&createdb;
- &createlang;
&createuser;
&dropdb;
- &droplang;
&dropuser;
&ecpgRef;
&pgBasebackup;
diff --git a/doc/src/sgml/release-9.1.sgml b/doc/src/sgml/release-9.1.sgml
index eb2d6ac278..2d0540c39e 100644
--- a/doc/src/sgml/release-9.1.sgml
+++ b/doc/src/sgml/release-9.1.sgml
@@ -10860,9 +10860,7 @@ SELECT * FROM places ORDER BY location <-> point '(101,456)' LIMIT 10;
<listitem>
<para>
- Mark <link
- linkend="APP-CREATELANG"><application>createlang</></link>
- and <link linkend="APP-DROPLANG"><application>droplang</></link>
+ Mark <application>createlang</> and <application>droplang</>
as deprecated now that they just invoke extension commands (Tom
Lane)
</para>
diff --git a/doc/src/sgml/xplang.sgml b/doc/src/sgml/xplang.sgml
index 9fa97d4c70..4460c8f361 100644
--- a/doc/src/sgml/xplang.sgml
+++ b/doc/src/sgml/xplang.sgml
@@ -56,14 +56,7 @@
For the languages supplied with the standard distribution, it is
only necessary to execute <command>CREATE EXTENSION</>
<replaceable>language_name</> to install the language into the
- current database. Alternatively, the program <xref
- linkend="app-createlang"> can be used to do this from the shell
- command line. For example, to install the language
- <application>PL/Perl</application> into the database
- <literal>template1</>, use:
-<programlisting>
-createlang plperl template1
-</programlisting>
+ current database.
The manual procedure described below is only recommended for
installing languages that have not been packaged as extensions.
</para>
diff --git a/src/bin/scripts/.gitignore b/src/bin/scripts/.gitignore
index 40998d9670..0f23fe0004 100644
--- a/src/bin/scripts/.gitignore
+++ b/src/bin/scripts/.gitignore
@@ -1,9 +1,7 @@
/clusterdb
/createdb
-/createlang
/createuser
/dropdb
-/droplang
/dropuser
/reindexdb
/vacuumdb
diff --git a/src/bin/scripts/Makefile b/src/bin/scripts/Makefile
index 2f911e05ba..45ac492cfd 100644
--- a/src/bin/scripts/Makefile
+++ b/src/bin/scripts/Makefile
@@ -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
index 5897bfe747..0000000000
--- a/src/bin/scripts/createlang.c
+++ /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 <pgsql-bugs@postgresql.org>.\n"));
-}
diff --git a/src/bin/scripts/droplang.c b/src/bin/scripts/droplang.c
deleted file mode 100644
index 97d1de43ae..0000000000
--- a/src/bin/scripts/droplang.c
+++ /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 <pgsql-bugs@postgresql.org>.\n"));
-}
diff --git a/src/bin/scripts/nls.mk b/src/bin/scripts/nls.mk
index 9156d08a80..ef64083f5f 100644
--- a/src/bin/scripts/nls.mk
+++ b/src/bin/scripts/nls.mk
@@ -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
index ffbd35dcc5..0000000000
--- a/src/bin/scripts/t/030_createlang.pl
+++ /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
index 904cea2d4b..0000000000
--- a/src/bin/scripts/t/060_droplang.pl
+++ /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');
diff --git a/src/tools/msvc/Install.pm b/src/tools/msvc/Install.pm
index 0aa1422b9f..b81f4dd809 100644
--- a/src/tools/msvc/Install.pm
+++ b/src/tools/msvc/Install.pm
@@ -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',