<!--
$Header: /cvsroot/pgsql/doc/src/sgml/ref/pg_resetxlog.sgml,v 1.5 2002/08/29 22:19:03 petere Exp $
PostgreSQL documentation
-->

<refentry id="APP-PGRESETXLOG">
 <refmeta>
  <refentrytitle id="APP-PGRESETXLOG-TITLE"><application>pg_resetxlog</application></refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo>Application</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>pg_resetxlog</refname>
  <refpurpose>reset write-ahead log file and optionally the pg_control file</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>pg_resetxlog</command>
   <arg> -f </arg>
   <arg> -n </arg>
   <arg> -x <replaceable class="parameter">xid</replaceable> </arg>
   <arg> -l <replaceable class="parameter">fileid</replaceable>,<replaceable class="parameter">seg</replaceable> </arg>
   <arg choice="plain"><replaceable>datadir</replaceable></arg>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1 id="R1-APP-PGRESETXLOG-1">
  <title>Description</title>
  <para>
   <command>pg_resetxlog</command> clears the write-ahead log file and
   optionally the <filename>pg_control</> file.  This function is sometimes
   needed if these files have become corrupted.
   It should be used only as a last resort,
   when the server will not start due to such corruption.
  </para>

  <para>
   After running this command, it should be possible to start the server,
   but bear in mind that the database may contain inconsistent data due to
   partially-committed transactions.  You should immediately dump your data,
   run <application>initdb</>, and reload.  After reload, check for
   inconsistencies and repair as needed.
  </para>

  <para>
   This utility can only be run by the user who installed the server, because
   it requires read/write access to the <literal>datadir</>.
   For safety reasons, you must specify the data directory on the command line.
   <command>pg_resetxlog</command> does not use the environment variable
   <envar>PGDATA</>.
  </para>

  <para>
   If <command>pg_resetxlog</command> complains that it cannot determine
   valid data for <filename>pg_control</>, you can force it to proceed anyway
   by specifying the <literal>-f</> (force) switch.  In this case plausible values
   will be substituted for the missing data.  If <literal>-f</> is used then
   the recovered database must be treated with even more suspicion than
   usual --- an immediate dump and reload is imperative.  <emphasis>Do not</>
   execute any data-modifying operations in the database before you dump,
   as any such action is likely to make the corruption worse.
  </para>

  <para>
   The <literal>-n</> (no operation) switch instructs
   <command>pg_resetxlog</command> to print the values reconstructed from
   <filename>pg_control</> and then exit without modifying anything.
   This is mainly a debugging tool, but may be useful as a sanity check
   before allowing <command>pg_resetxlog</command> to proceed for real.
  </para>

  <para>
   The <literal>-x</> and <literal>-l</> switches are intended for use by
   <application>pg_upgrade</>.  In most cases they should not be used in
   manual recovery operations.
  </para>
 </refsect1>

 <refsect1>
  <title>Notes</title>

  <para>
   This command must not be used when the <application>postmaster</> is 
   running.  <command>pg_resetxlog</command> will refuse to start up if
   it finds a postmaster lock file in the <literal>datadir</>.  If the
   <application>postmaster</> crashed then a lock file may have been left
   behind; in that case you can remove the lock file to allow
   <command>pg_resetxlog</command> to run.  But before you do
   so, make doubly certain that there
   is no postmaster nor any backend server process still alive.
  </para>
 </refsect1>

</refentry>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:nil
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
sgml-parent-document:nil
sgml-default-dtd-file:"../reference.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:"/usr/lib/sgml/catalog"
sgml-local-ecat-files:nil
End:
-->
