<REFENTRY ID="APP-DESTROYDB">
<REFMETA>
<REFENTRYTITLE>
<application>destroydb</application>
</REFENTRYTITLE>
<REFMISCINFO>Application</REFMISCINFO>
</REFMETA>
<REFNAMEDIV>
<REFNAME>
<application>destroydb</application>
</REFNAME>
<REFPURPOSE>
Remove an existing <productname>Postgres</productname> database
</REFPURPOSE>
  </refnamediv>
<REFSYNOPSISDIV>
<REFSYNOPSISDIVINFO>
<DATE>1998-10-02</DATE>
</REFSYNOPSISDIVINFO>
<SYNOPSIS>
destroydb [ <replaceable class="parameter">dbname</replaceable> ]
destroydb [ -h <replaceable class="parameter">host</replaceable> ] [ -p <replaceable class="parameter">port</replaceable> ]
    [ -i ] [ <replaceable class="parameter">dbname</replaceable> ]
</SYNOPSIS>

    <REFSECT2 ID="R2-APP-DESTROYDB-1">
      <REFSECT2INFO>
	<DATE>1998-10-02</DATE>
      </REFSECT2INFO>
      <TITLE>
	Inputs
      </TITLE>
      <PARA>
	
	<variablelist>
	  <varlistentry>
	    <term>
	      -h <replaceable class="parameter">host</replaceable>
	    </term>
	    <listitem>
	      <para>
		Specifies the hostname of the machine on which the 
		<application>postmaster</application>
		is running.  Defaults to using a local Unix domain socket
		rather than an IP connection..
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      -p <replaceable class="parameter">port</replaceable>
	    </term>
	    <listitem>
	      <para>
		Specifies the Internet TCP/IP port or local Unix domain socket file 
		extension on which the <application>postmaster</application>
		is listening for connections.  The port number defaults to 5432,
		or the value of the <envar>PGPORT</envar>
		environment variable (if set).
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      -i
	    </term>
	    <listitem>
	      <para>
		Run in interactive mode.
		Prompts for confirmation before destroying a database.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      <replaceable class="parameter">dbname</replaceable>
	    </term>
	    <listitem>
	      <para>
		Specifies the name of the database to be destroyed.  The database
		must be one of the existing <productname>Postgres</productname> databases
		in this installation.
		<replaceable class="parameter">dbname</replaceable>
		defaults to the value of the
		<envar>USER</envar>
		environment variable.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	</variablelist>
      </para>
    </refsect2>

    <REFSECT2 ID="R2-APP-DESTROYDB-2">
      <REFSECT2INFO>
	<DATE>1998-10-02</DATE>
      </REFSECT2INFO>
      <TITLE>
	Outputs
      </TITLE>
      <PARA>
	<application>destroydb</application> will remove files from the
	<filename><envar>PGDATA</envar>/<replaceable class="parameter">dbname</replaceable>/</filename>
	data area for the existing database.
	
	<variablelist>
	  <varlistentry>
	    <term>
	      Connection to database 'template1' failed.
	      connectDB() failed: Is the postmaster running and accepting connections
	      at 'UNIX Socket' on port '<replaceable class="parameter">port</replaceable>'?
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		<application>destroydb</application> could not attach to the 
		<application>postmaster</application> 
		process on the specified host and port.  If you see this message,
		ensure that the <application>postmaster</application> 
		is running on the proper host and that you have specified the proper
		port.  If your site uses an authentication system, ensure that you
		have obtained the required authentication credentials.
	      </para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>
	      Connection to database 'template1' failed.
	      FATAL 1:  SetUserId: user '<replaceable class="parameter">username</replaceable>' is not in 'pg_shadow'
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		You do not have a valid entry in the relation <literal>pg_shadow</literal>
		and and will not be allowed to access <productname>Postgres</productname>. 
		Contact your <productname>Postgres</productname> administrator.
	      </para>
	    </listitem>
	  </varlistentry>

	  <varlistentry>
	    <term>
	      ERROR:  user '<replaceable class="parameter">username</replaceable>' is not allowed to create/destroy databases
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		You do not have permission to destroy (or create) databases. 
		Contact your <productname>Postgres</productname> site administrator.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      ERROR:  destroydb: database '<replaceable class="parameter">dbname</replaceable>' does not exist.
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		The database to be removed does not have an entry in the
		<literal>pg_database</literal> class.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      ERROR:  destroydb: database '<replaceable class="parameter">dbname</replaceable>' is not owned by you.
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		You are not the Database Administrator (DBA) for the specified database.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	  <varlistentry>
	    <term>
	      destroydb: database destroy failed on <replaceable class="parameter">dbname</replaceable>.
	    </term>
	    <listitem>
	      <para>
		An internal error occurred in <application>psql</application>
		or in the backend server.  Ensure that your site administrator has
		properly installed <productname>Postgres</productname>and initialized the site with 
		<application>initdb</application>.
	      </para>
	    </listitem>
	  </varlistentry>
	  
	</variablelist>
      </para>
      <note>
	<para>
	  <application>destroydb</application> internally runs
	  <command>DESTROY DATABASE</command> from <application>psql</application>
	  while connected to the <literal>template1</literal> database.
	</para>
      </note>
    </refsect2>
  </refsynopsisdiv>

  <REFSECT1 ID="R1-APP-DESTROYDB-1">
    <REFSECT1INFO>
      <DATE>1998-10-02</DATE>
    </REFSECT1INFO>
    <TITLE>
      Description
    </TITLE>
    <PARA>
      <application>destroydb</application> destroys an existing
      <productname>Postgres</productname> database.
      The person who executes this command must be
      the database administrator, or <acronym>DBA</acronym>,
      or must be the <productname>Postgres</productname> super-user.
      The program runs silently; no confirmation message will be displayed.
      After the database is destroyed, a Unix shell prompt will reappear.
    </para>
    <para>
      All references to
      the database are removed, including the directory containing this
      database and its associated files.
    </para>
    <para>
      <application>destroydb</application> is a shell script that invokes
      <application>psql</application>.
      Hence, a <application>postmaster</application>
      process must be running on the database server host before
      <application>destroydb</application>
      is executed. The 
      <envar>PGOPTION</envar>
      and
      <envar>PGREALM</envar>
      environment variables will be passed on to
      <application>psql</application>
      and processed as described in <xref linkend="app-psql" endterm="psql-ref">.
    </para>
  </refsect1>

  <REFSECT1 ID="R1-APP-DESTROYDB-2">
    <REFSECT1INFO>
      <DATE>1998-10-02</DATE>
    </REFSECT1INFO>
    <TITLE>
      Usage
    </TITLE>
    <PARA>
      To destroy the database <literal>demo</literal>
      using the postmaster on the local host, port 5432:
      <programlisting>
	destroydb demo
      </programlisting>
    </para>
    <para>
      To destroy the database <literal>demo</literal>
      using the postmaster on host eden, port 5000:
      <programlisting>
	destroydb -p 5000 -h eden demo
      </programlisting>
    </para>
  </refsect1>
</REFENTRY>
