]> granicus.if.org Git - postgresql/blob - doc/src/sgml/ref/insert.sgml
Add support for piping COPY to/from an external program.
[postgresql] / doc / src / sgml / ref / insert.sgml
1 <!--
2 doc/src/sgml/ref/insert.sgml
3 PostgreSQL documentation
4 -->
5
6 <refentry id="SQL-INSERT">
7  <refmeta>
8   <refentrytitle>INSERT</refentrytitle>
9   <manvolnum>7</manvolnum>
10   <refmiscinfo>SQL - Language Statements</refmiscinfo>
11  </refmeta>
12
13  <refnamediv>
14   <refname>INSERT</refname>
15   <refpurpose>create new rows in a table</refpurpose>
16  </refnamediv>
17
18  <indexterm zone="sql-insert">
19   <primary>INSERT</primary>
20  </indexterm>
21
22  <refsynopsisdiv>
23 <synopsis>
24 [ WITH [ RECURSIVE ] <replaceable class="parameter">with_query</replaceable> [, ...] ]
25 INSERT INTO <replaceable class="PARAMETER">table_name</replaceable> [ ( <replaceable class="PARAMETER">column_name</replaceable> [, ...] ) ]
26     { DEFAULT VALUES | VALUES ( { <replaceable class="PARAMETER">expression</replaceable> | DEFAULT } [, ...] ) [, ...] | <replaceable class="PARAMETER">query</replaceable> }
27     [ RETURNING * | <replaceable class="parameter">output_expression</replaceable> [ [ AS ] <replaceable class="parameter">output_name</replaceable> ] [, ...] ]
28 </synopsis>
29  </refsynopsisdiv>
30
31  <refsect1>
32   <title>Description</title>
33
34   <para>
35    <command>INSERT</command> inserts new rows into a table.
36    One can insert one or more rows specified by value expressions,
37    or zero or more rows resulting from a query.
38   </para>
39
40   <para>
41    The target column names can be listed in any order.  If no list of
42    column names is given at all, the default is all the columns of the
43    table in their declared order; or the first <replaceable>N</> column
44    names, if there are only <replaceable>N</> columns supplied by the
45    <literal>VALUES</> clause or <replaceable>query</>.  The values
46    supplied by the <literal>VALUES</> clause or <replaceable>query</> are
47    associated with the explicit or implicit column list left-to-right.
48   </para>
49
50   <para>
51    Each column not present in the explicit or implicit column list will be
52    filled with a default value, either its declared default value
53    or null if there is none.
54   </para>
55
56   <para>
57    If the expression for any column is not of the correct data type,
58    automatic type conversion will be attempted.
59   </para>
60
61   <para>
62    The optional <literal>RETURNING</> clause causes <command>INSERT</>
63    to compute and return value(s) based on each row actually inserted.
64    This is primarily useful for obtaining values that were supplied by
65    defaults, such as a serial sequence number.  However, any expression
66    using the table's columns is allowed.  The syntax of the
67    <literal>RETURNING</> list is identical to that of the output list
68    of <command>SELECT</>.
69   </para>
70
71   <para>
72    You must have <literal>INSERT</literal> privilege on a table in
73    order to insert into it.  If a column list is specified, you only
74    need <literal>INSERT</literal> privilege on the listed columns.
75    Use of the <literal>RETURNING</> clause requires <literal>SELECT</>
76    privilege on all columns mentioned in <literal>RETURNING</>.
77    If you use the <replaceable
78    class="PARAMETER">query</replaceable> clause to insert rows from a
79    query, you of course need to have <literal>SELECT</literal> privilege on
80    any table or column used in the query.
81   </para>
82  </refsect1>
83
84  <refsect1>
85   <title>Parameters</title>
86
87   <variablelist>
88    <varlistentry>
89     <term><replaceable class="parameter">with_query</replaceable></term>
90     <listitem>
91      <para>
92       The <literal>WITH</literal> clause allows you to specify one or more
93       subqueries that can be referenced by name in the <command>INSERT</>
94       query. See <xref linkend="queries-with"> and <xref linkend="sql-select">
95       for details.
96      </para>
97      <para>
98       It is possible for the <replaceable class="parameter">query</replaceable>
99       (<command>SELECT</command> statement)
100       to also contain a <literal>WITH</literal> clause.  In such a case both
101       sets of <replaceable>with_query</replaceable> can be referenced within
102       the <replaceable class="parameter">query</replaceable>, but the
103       second one takes precedence since it is more closely nested.
104      </para>
105     </listitem>
106    </varlistentry>
107
108    <varlistentry>
109     <term><replaceable class="PARAMETER">table_name</replaceable></term>
110     <listitem>
111      <para>
112       The name (optionally schema-qualified) of an existing table.
113      </para>
114     </listitem>
115    </varlistentry>
116
117    <varlistentry>
118     <term><replaceable class="PARAMETER">column_name</replaceable></term>
119     <listitem>
120      <para>
121       The name of a column in the table named by <replaceable class="PARAMETER">table_name</replaceable>.
122       The column name can be qualified with a subfield name or array
123       subscript, if needed.  (Inserting into only some fields of a
124       composite column leaves the other fields null.)
125      </para>
126     </listitem>
127    </varlistentry>
128
129    <varlistentry>
130     <term><literal>DEFAULT VALUES</literal></term>
131     <listitem>
132      <para>
133       All columns will be filled with their default values.
134      </para>
135     </listitem>
136    </varlistentry>
137
138    <varlistentry>
139     <term><replaceable class="PARAMETER">expression</replaceable></term>
140     <listitem>
141      <para>
142       An expression or value to assign to the corresponding column.
143      </para>
144     </listitem>
145    </varlistentry>
146
147    <varlistentry>
148     <term><literal>DEFAULT</literal></term>
149     <listitem>
150      <para>
151       The corresponding column will be filled with
152       its default value.
153      </para>
154     </listitem>
155    </varlistentry>
156
157    <varlistentry>
158     <term><replaceable class="PARAMETER">query</replaceable></term>
159     <listitem>
160      <para>
161       A query (<command>SELECT</command> statement) that supplies the
162       rows to be inserted.  Refer to the
163       <xref linkend="sql-select">
164       statement for a description of the syntax.
165      </para>
166     </listitem>
167    </varlistentry>
168
169    <varlistentry>
170     <term><replaceable class="PARAMETER">output_expression</replaceable></term>
171     <listitem>
172      <para>
173       An expression to be computed and returned by the <command>INSERT</>
174       command after each row is inserted.  The expression can use any
175       column names of the table named by <replaceable class="PARAMETER">table_name</replaceable>.
176       Write <literal>*</> to return all columns of the inserted row(s).
177      </para>
178     </listitem>
179    </varlistentry>
180
181    <varlistentry>
182     <term><replaceable class="PARAMETER">output_name</replaceable></term>
183     <listitem>
184      <para>
185       A name to use for a returned column.
186      </para>
187     </listitem>
188    </varlistentry>
189   </variablelist>
190  </refsect1>
191
192  <refsect1>
193   <title>Outputs</title>
194
195   <para>
196    On successful completion, an <command>INSERT</> command returns a command
197    tag of the form
198 <screen>
199 INSERT <replaceable>oid</replaceable> <replaceable class="parameter">count</replaceable>
200 </screen>
201    The <replaceable class="parameter">count</replaceable> is the number
202    of rows inserted.  If <replaceable class="parameter">count</replaceable>
203    is exactly one, and the target table has OIDs, then
204    <replaceable class="parameter">oid</replaceable> is the
205    <acronym>OID</acronym> assigned to the inserted row.  Otherwise
206    <replaceable class="parameter">oid</replaceable> is zero.
207   </para>
208
209   <para>
210    If the <command>INSERT</> command contains a <literal>RETURNING</>
211    clause, the result will be similar to that of a <command>SELECT</>
212    statement containing the columns and values defined in the
213    <literal>RETURNING</> list, computed over the row(s) inserted by the
214    command.
215   </para>
216  </refsect1>
217
218  <refsect1>
219   <title>Examples</title>
220
221   <para>
222    Insert a single row into table <literal>films</literal>:
223
224 <programlisting>
225 INSERT INTO films VALUES
226     ('UA502', 'Bananas', 105, '1971-07-13', 'Comedy', '82 minutes');
227 </programlisting>
228   </para>
229
230   <para>
231    In this example, the <literal>len</literal> column is
232    omitted and therefore it will have the default value:
233
234 <programlisting>
235 INSERT INTO films (code, title, did, date_prod, kind)
236     VALUES ('T_601', 'Yojimbo', 106, '1961-06-16', 'Drama');
237 </programlisting>
238   </para>
239
240   <para>
241    This example uses the <literal>DEFAULT</literal> clause for
242    the date columns rather than specifying a value:
243
244 <programlisting>
245 INSERT INTO films VALUES
246     ('UA502', 'Bananas', 105, DEFAULT, 'Comedy', '82 minutes');
247 INSERT INTO films (code, title, did, date_prod, kind)
248     VALUES ('T_601', 'Yojimbo', 106, DEFAULT, 'Drama');
249 </programlisting>
250   </para>
251
252   <para>
253    To insert a row consisting entirely of default values:
254
255 <programlisting>
256 INSERT INTO films DEFAULT VALUES;
257 </programlisting>
258   </para>
259
260   <para>
261    To insert multiple rows using the multirow <command>VALUES</> syntax:
262
263 <programlisting>
264 INSERT INTO films (code, title, did, date_prod, kind) VALUES
265     ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
266     ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');
267 </programlisting>
268   </para>
269
270   <para>
271    This example inserts some rows into table
272    <literal>films</literal> from a table <literal>tmp_films</literal>
273    with the same column layout as <literal>films</literal>:
274
275 <programlisting>
276 INSERT INTO films SELECT * FROM tmp_films WHERE date_prod &lt; '2004-05-07';
277 </programlisting>
278   </para>
279
280   <para>
281    This example inserts into array columns:
282
283 <programlisting>
284 -- Create an empty 3x3 gameboard for noughts-and-crosses
285 INSERT INTO tictactoe (game, board[1:3][1:3])
286     VALUES (1, '{{" "," "," "},{" "," "," "},{" "," "," "}}');
287 -- The subscripts in the above example aren't really needed
288 INSERT INTO tictactoe (game, board)
289     VALUES (2, '{{X," "," "},{" ",O," "},{" ",X," "}}');
290 </programlisting>
291   </para>
292
293   <para>
294    Insert a single row into table <literal>distributors</literal>, returning
295    the sequence number generated by the <literal>DEFAULT</literal> clause:
296
297 <programlisting>
298 INSERT INTO distributors (did, dname) VALUES (DEFAULT, 'XYZ Widgets')
299    RETURNING did;
300 </programlisting>
301   </para>
302
303   <para>
304    Increment the sales count of the salesperson who manages the
305    account for Acme Corporation, and record the whole updated row
306    along with current time in a log table:
307 <programlisting>
308 WITH upd AS (
309   UPDATE employees SET sales_count = sales_count + 1 WHERE id =
310     (SELECT sales_person FROM accounts WHERE name = 'Acme Corporation')
311     RETURNING *
312 )
313 INSERT INTO employees_log SELECT *, current_timestamp FROM upd;
314 </programlisting></para>
315  </refsect1>
316
317  <refsect1>
318   <title>Compatibility</title>
319
320   <para>
321    <command>INSERT</command> conforms to the SQL standard, except that
322    the <literal>RETURNING</> clause is a
323    <productname>PostgreSQL</productname> extension, as is the ability
324    to use <literal>WITH</> with <command>INSERT</>.
325    Also, the case in
326    which a column name list is omitted, but not all the columns are
327    filled from the <literal>VALUES</> clause or <replaceable>query</>,
328    is disallowed by the standard.
329   </para>
330
331   <para>
332    Possible limitations of the <replaceable
333    class="PARAMETER">query</replaceable> clause are documented under
334    <xref linkend="sql-select">.
335   </para>
336  </refsect1>
337 </refentry>