Home Explore Blog CI



postgresql

1st chunk of `doc/src/sgml/ref/prepare.sgml`
5f1abcac7e680b01d34ddd19287bf121142ec0174c424f440000000100000fbb
<!--
doc/src/sgml/ref/prepare.sgml
PostgreSQL documentation
-->

<refentry id="sql-prepare">
 <indexterm zone="sql-prepare">
  <primary>PREPARE</primary>
 </indexterm>

 <indexterm zone="sql-prepare">
  <primary>prepared statements</primary>
  <secondary>creating</secondary>
 </indexterm>

 <refmeta>
  <refentrytitle>PREPARE</refentrytitle>
  <manvolnum>7</manvolnum>
  <refmiscinfo>SQL - Language Statements</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>PREPARE</refname>
  <refpurpose>prepare a statement for execution</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
<synopsis>
PREPARE <replaceable class="parameter">name</replaceable> [ ( <replaceable class="parameter">data_type</replaceable> [, ...] ) ] AS <replaceable class="parameter">statement</replaceable>
</synopsis>
 </refsynopsisdiv>

 <refsect1>
  <title>Description</title>

  <para>
   <command>PREPARE</command> creates a prepared statement. A prepared
   statement is a server-side object that can be used to optimize
   performance. When the <command>PREPARE</command> statement is
   executed, the specified statement is parsed, analyzed, and rewritten.
   When an <command>EXECUTE</command> command is subsequently
   issued, the prepared statement is planned and executed.  This division
   of labor avoids repetitive parse analysis work, while allowing
   the execution plan to depend on the specific parameter values supplied.
  </para>

  <para>
   Prepared statements can take parameters: values that are
   substituted into the statement when it is executed. When creating
   the prepared statement, refer to parameters by position, using
   <literal>$1</literal>, <literal>$2</literal>, etc. A corresponding list of
   parameter data types can optionally be specified. When a
   parameter's data type is not specified or is declared as
   <literal>unknown</literal>, the type is inferred from the context
   in which the parameter is first referenced (if possible). When executing the
   statement, specify the actual values for these parameters in the
   <command>EXECUTE</command> statement.  Refer to <xref
   linkend="sql-execute"/> for more
   information about that.
  </para>

  <para>
   Prepared statements only last for the duration of the current
   database session. When the session ends, the prepared statement is
   forgotten, so it must be recreated before being used again. This
   also means that a single  prepared statement cannot be used by
   multiple simultaneous database clients; however, each client can create
   their own prepared statement to use.  Prepared statements can be
   manually cleaned up using the <link linkend="sql-deallocate"><command>DEALLOCATE</command></link> command.
  </para>

  <para>
   Prepared statements potentially have the largest performance advantage
   when a single session is being used to execute a large number of similar
   statements. The performance difference will be particularly
   significant if the statements are complex to plan or rewrite, e.g.,
   if the query involves a join of many tables or requires
   the application of several rules. If the statement is relatively simple
   to plan and rewrite but relatively expensive to execute, the
   performance advantage of prepared statements will be less noticeable.
  </para>
 </refsect1>

 <refsect1>
  <title>Parameters</title>

  <variablelist>
   <varlistentry>
    <term><replaceable class="parameter">name</replaceable></term>
    <listitem>
     <para>
      An arbitrary name given to this particular prepared
      statement. It must be unique within a single session and is
      subsequently used to execute or deallocate a previously prepared
      statement.
     </para>
    </listitem>
   </varlistentry>

   <varlistentry>
    <term><replaceable class="parameter">data_type</replaceable></term>
    <listitem>
     <para>
      The data type of a parameter to the prepared statement.  If the
      data type of a particular parameter is unspecified or is
      specified as <literal>unknown</literal>,

Title: PREPARE
Summary
The PREPARE command creates a prepared statement, which is a server-side object that optimizes performance by parsing, analyzing, and rewriting the statement when PREPARE is executed, and planning and executing it when an EXECUTE command is issued. Prepared statements can take parameters, referred to by position ($1, $2, etc.), and their data types can be specified. Prepared statements last only for the duration of the current database session and can be manually cleaned up using the DEALLOCATE command. They offer the largest performance advantage when a single session executes a large number of similar, complex statements.