| <!-- |
| $PostgreSQL: pgsql/doc/src/sgml/ref/truncate.sgml,v 1.21 2006/09/16 00:30:20 momjian Exp $ |
| PostgreSQL documentation |
| --> |
| |
| <refentry id="SQL-TRUNCATE"> |
| <refmeta> |
| <refentrytitle id="SQL-TRUNCATE-TITLE">TRUNCATE</refentrytitle> |
| <refmiscinfo>SQL - Language Statements</refmiscinfo> |
| </refmeta> |
| |
| <refnamediv> |
| <refname>TRUNCATE</refname> |
| <refpurpose>empty a table or set of tables</refpurpose> |
| </refnamediv> |
| |
| <indexterm zone="sql-truncate"> |
| <primary>TRUNCATE</primary> |
| </indexterm> |
| |
| <refsynopsisdiv> |
| <synopsis> |
| TRUNCATE [ TABLE ] <replaceable class="PARAMETER">name</replaceable> [, ...] [ CASCADE | RESTRICT ] |
| </synopsis> |
| </refsynopsisdiv> |
| |
| <refsect1> |
| <title>Description</title> |
| |
| <para> |
| <command>TRUNCATE</command> quickly removes all rows from a set of |
| tables. It has the same effect as an unqualified |
| <command>DELETE</command> on each table, but since it does not actually |
| scan the tables it is faster. This is most useful on large tables. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Parameters</title> |
| |
| <variablelist> |
| <varlistentry> |
| <term><replaceable class="PARAMETER">name</replaceable></term> |
| <listitem> |
| <para> |
| The name (optionally schema-qualified) of a table to be truncated. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><literal>CASCADE</literal></term> |
| <listitem> |
| <para> |
| Automatically truncate all tables that have foreign-key references |
| to any of the named tables, or to any tables added to the group |
| due to <literal>CASCADE</literal>. |
| </para> |
| </listitem> |
| </varlistentry> |
| |
| <varlistentry> |
| <term><literal>RESTRICT</literal></term> |
| <listitem> |
| <para> |
| Refuse to truncate if any of the tables have foreign-key references |
| from tables that are not to be truncated. This is the default. |
| </para> |
| </listitem> |
| </varlistentry> |
| </variablelist> |
| </refsect1> |
| |
| <refsect1> |
| <title>Notes</title> |
| |
| <para> |
| Only the owner of a table may <command>TRUNCATE</> it. |
| </para> |
| |
| <para> |
| <command>TRUNCATE</> cannot be used on a table that has foreign-key |
| references from other tables, unless all such tables are also truncated |
| in the same command. Checking validity in such cases would require table |
| scans, and the whole point is not to do one. The <literal>CASCADE</> |
| option can be used to automatically include all dependent tables — |
| but be very careful when using this option, else you might lose data you |
| did not intend to! |
| </para> |
| |
| <para> |
| <command>TRUNCATE</> will not run any user-defined <literal>ON |
| DELETE</literal> triggers that might exist for the tables. |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Examples</title> |
| |
| <para> |
| Truncate the tables <literal>bigtable</literal> and <literal>fattable</literal>: |
| |
| <programlisting> |
| TRUNCATE TABLE bigtable, fattable; |
| </programlisting> |
| </para> |
| |
| <para> |
| Truncate the table <literal>othertable</literal>, and cascade to any tables |
| that are referencing <literal>othertable</literal> via foreign-key |
| constraints: |
| |
| <programlisting> |
| TRUNCATE othertable CASCADE; |
| </programlisting> |
| </para> |
| </refsect1> |
| |
| <refsect1> |
| <title>Compatibility</title> |
| |
| <para> |
| There is no <command>TRUNCATE</command> command in the SQL standard. |
| </para> |
| </refsect1> |
| </refentry> |