@@ -251,6 +251,145 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
251
251
</listitem>
252
252
</varlistentry>
253
253
254
+ <varlistentry>
255
+ <term><replaceable class="parameter">column_name</replaceable></term>
256
+ <listitem>
257
+ <para>
258
+ The name of a column to be created in the new table.
259
+ </para>
260
+ </listitem>
261
+ </varlistentry>
262
+
263
+ <varlistentry>
264
+ <term><replaceable class="parameter">data_type</replaceable></term>
265
+ <listitem>
266
+ <para>
267
+ The data type of the column. This can include array
268
+ specifiers. For more information on the data types supported by
269
+ <productname>PostgreSQL</productname>, refer to <xref
270
+ linkend="datatype"/>.
271
+ </para>
272
+ </listitem>
273
+ </varlistentry>
274
+
275
+ <varlistentry>
276
+ <term><literal>COLLATE <replaceable>collation</replaceable></literal></term>
277
+ <listitem>
278
+ <para>
279
+ The <literal>COLLATE</literal> clause assigns a collation to
280
+ the column (which must be of a collatable data type).
281
+ If not specified, the column data type's default collation is used.
282
+ </para>
283
+ </listitem>
284
+ </varlistentry>
285
+
286
+ <varlistentry>
287
+ <term><literal>INHERITS ( <replaceable>parent_table</replaceable> [, ... ] )</literal></term>
288
+ <listitem>
289
+ <para>
290
+ The optional <literal>INHERITS</literal> clause specifies a list of
291
+ tables from which the new table automatically inherits all
292
+ columns. Parent tables can be plain tables or foreign tables.
293
+ </para>
294
+
295
+ <para>
296
+ Use of <literal>INHERITS</literal> creates a persistent relationship
297
+ between the new child table and its parent table(s). Schema
298
+ modifications to the parent(s) normally propagate to children
299
+ as well, and by default the data of the child table is included in
300
+ scans of the parent(s).
301
+ </para>
302
+
303
+ <para>
304
+ If the same column name exists in more than one parent
305
+ table, an error is reported unless the data types of the columns
306
+ match in each of the parent tables. If there is no conflict,
307
+ then the duplicate columns are merged to form a single column in
308
+ the new table. If the column name list of the new table
309
+ contains a column name that is also inherited, the data type must
310
+ likewise match the inherited column(s), and the column
311
+ definitions are merged into one. If the
312
+ new table explicitly specifies a default value for the column,
313
+ this default overrides any defaults from inherited declarations
314
+ of the column. Otherwise, any parents that specify default
315
+ values for the column must all specify the same default, or an
316
+ error will be reported.
317
+ </para>
318
+
319
+ <para>
320
+ <literal>CHECK</literal> constraints are merged in essentially the same way as
321
+ columns: if multiple parent tables and/or the new table definition
322
+ contain identically-named <literal>CHECK</literal> constraints, these
323
+ constraints must all have the same check expression, or an error will be
324
+ reported. Constraints having the same name and expression will
325
+ be merged into one copy. A constraint marked <literal>NO INHERIT</literal> in a
326
+ parent will not be considered. Notice that an unnamed <literal>CHECK</literal>
327
+ constraint in the new table will never be merged, since a unique name
328
+ will always be chosen for it.
329
+ </para>
330
+
331
+ <para>
332
+ Column <literal>STORAGE</literal> settings are also copied from parent tables.
333
+ </para>
334
+
335
+ <para>
336
+ If a column in the parent table is an identity column, that property is
337
+ not inherited. A column in the child table can be declared identity
338
+ column if desired.
339
+ </para>
340
+ </listitem>
341
+ </varlistentry>
342
+
343
+ <varlistentry>
344
+ <term><literal>PARTITION BY { RANGE | LIST | HASH } ( { <replaceable class="parameter">column_name</replaceable> | ( <replaceable class="parameter">expression</replaceable> ) } [ <replaceable class="parameter">opclass</replaceable> ] [, ...] ) </literal></term>
345
+ <listitem>
346
+ <para>
347
+ The optional <literal>PARTITION BY</literal> clause specifies a strategy
348
+ of partitioning the table. The table thus created is called a
349
+ <firstterm>partitioned</firstterm> table. The parenthesized list of
350
+ columns or expressions forms the <firstterm>partition key</firstterm>
351
+ for the table. When using range or hash partitioning, the partition key
352
+ can include multiple columns or expressions (up to 32, but this limit can
353
+ be altered when building <productname>PostgreSQL</productname>), but for
354
+ list partitioning, the partition key must consist of a single column or
355
+ expression.
356
+ </para>
357
+
358
+ <para>
359
+ Range and list partitioning require a btree operator class, while hash
360
+ partitioning requires a hash operator class. If no operator class is
361
+ specified explicitly, the default operator class of the appropriate
362
+ type will be used; if no default operator class exists, an error will
363
+ be raised. When hash partitioning is used, the operator class used
364
+ must implement support function 2 (see <xref linkend="xindex-support"/>
365
+ for details).
366
+ </para>
367
+
368
+ <para>
369
+ A partitioned table is divided into sub-tables (called partitions),
370
+ which are created using separate <literal>CREATE TABLE</literal> commands.
371
+ The partitioned table is itself empty. A data row inserted into the
372
+ table is routed to a partition based on the value of columns or
373
+ expressions in the partition key. If no existing partition matches
374
+ the values in the new row, an error will be reported.
375
+ </para>
376
+
377
+ <para>
378
+ Partitioned tables do not support <literal>EXCLUDE</literal> constraints;
379
+ however, you can define these constraints on individual partitions.
380
+ Also, while it's possible to define <literal>PRIMARY KEY</literal>
381
+ constraints on partitioned tables, creating foreign keys that
382
+ reference a partitioned table is not yet supported.
383
+ </para>
384
+
385
+ <para>
386
+ See <xref linkend="ddl-partitioning"/> for more discussion on table
387
+ partitioning.
388
+ </para>
389
+
390
+ </listitem>
391
+ </varlistentry>
392
+
254
393
<varlistentry id="sql-createtable-partition">
255
394
<term><literal>PARTITION OF <replaceable class="parameter">parent_table</replaceable> { FOR VALUES <replaceable class="parameter">partition_bound_spec</replaceable> | DEFAULT }</literal></term>
256
395
<listitem>
@@ -421,140 +560,6 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
421
560
</listitem>
422
561
</varlistentry>
423
562
424
- <varlistentry>
425
- <term><replaceable class="parameter">column_name</replaceable></term>
426
- <listitem>
427
- <para>
428
- The name of a column to be created in the new table.
429
- </para>
430
- </listitem>
431
- </varlistentry>
432
-
433
- <varlistentry>
434
- <term><replaceable class="parameter">data_type</replaceable></term>
435
- <listitem>
436
- <para>
437
- The data type of the column. This can include array
438
- specifiers. For more information on the data types supported by
439
- <productname>PostgreSQL</productname>, refer to <xref
440
- linkend="datatype"/>.
441
- </para>
442
- </listitem>
443
- </varlistentry>
444
-
445
- <varlistentry>
446
- <term><literal>COLLATE <replaceable>collation</replaceable></literal></term>
447
- <listitem>
448
- <para>
449
- The <literal>COLLATE</literal> clause assigns a collation to
450
- the column (which must be of a collatable data type).
451
- If not specified, the column data type's default collation is used.
452
- </para>
453
- </listitem>
454
- </varlistentry>
455
-
456
- <varlistentry>
457
- <term><literal>INHERITS ( <replaceable>parent_table</replaceable> [, ... ] )</literal></term>
458
- <listitem>
459
- <para>
460
- The optional <literal>INHERITS</literal> clause specifies a list of
461
- tables from which the new table automatically inherits all
462
- columns. Parent tables can be plain tables or foreign tables.
463
- </para>
464
-
465
- <para>
466
- Use of <literal>INHERITS</literal> creates a persistent relationship
467
- between the new child table and its parent table(s). Schema
468
- modifications to the parent(s) normally propagate to children
469
- as well, and by default the data of the child table is included in
470
- scans of the parent(s).
471
- </para>
472
-
473
- <para>
474
- If the same column name exists in more than one parent
475
- table, an error is reported unless the data types of the columns
476
- match in each of the parent tables. If there is no conflict,
477
- then the duplicate columns are merged to form a single column in
478
- the new table. If the column name list of the new table
479
- contains a column name that is also inherited, the data type must
480
- likewise match the inherited column(s), and the column
481
- definitions are merged into one. If the
482
- new table explicitly specifies a default value for the column,
483
- this default overrides any defaults from inherited declarations
484
- of the column. Otherwise, any parents that specify default
485
- values for the column must all specify the same default, or an
486
- error will be reported.
487
- </para>
488
-
489
- <para>
490
- <literal>CHECK</literal> constraints are merged in essentially the same way as
491
- columns: if multiple parent tables and/or the new table definition
492
- contain identically-named <literal>CHECK</literal> constraints, these
493
- constraints must all have the same check expression, or an error will be
494
- reported. Constraints having the same name and expression will
495
- be merged into one copy. A constraint marked <literal>NO INHERIT</literal> in a
496
- parent will not be considered. Notice that an unnamed <literal>CHECK</literal>
497
- constraint in the new table will never be merged, since a unique name
498
- will always be chosen for it.
499
- </para>
500
-
501
- <para>
502
- Column <literal>STORAGE</literal> settings are also copied from parent tables.
503
- </para>
504
-
505
- <para>
506
- If a column in the parent table is an identity column, that property is
507
- not inherited. A column in the child table can be declared identity
508
- column if desired.
509
- </para>
510
- </listitem>
511
- </varlistentry>
512
-
513
- <varlistentry>
514
- <term><literal>PARTITION BY { RANGE | LIST | HASH } ( { <replaceable class="parameter">column_name</replaceable> | ( <replaceable class="parameter">expression</replaceable> ) } [ <replaceable class="parameter">opclass</replaceable> ] [, ...] ) </literal></term>
515
- <listitem>
516
- <para>
517
- The optional <literal>PARTITION BY</literal> clause specifies a strategy
518
- of partitioning the table. The table thus created is called a
519
- <firstterm>partitioned</firstterm> table. The parenthesized list of
520
- columns or expressions forms the <firstterm>partition key</firstterm>
521
- for the table. When using range or hash partitioning, the partition key
522
- can include multiple columns or expressions (up to 32, but this limit can
523
- be altered when building <productname>PostgreSQL</productname>), but for
524
- list partitioning, the partition key must consist of a single column or
525
- expression.
526
- </para>
527
-
528
- <para>
529
- Range and list partitioning require a btree operator class, while hash
530
- partitioning requires a hash operator class. If no operator class is
531
- specified explicitly, the default operator class of the appropriate
532
- type will be used; if no default operator class exists, an error will
533
- be raised. When hash partitioning is used, the operator class used
534
- must implement support function 2 (see <xref linkend="xindex-support"/>
535
- for details).
536
- </para>
537
-
538
- <para>
539
- A partitioned table is divided into sub-tables (called partitions),
540
- which are created using separate <literal>CREATE TABLE</literal> commands.
541
- The partitioned table is itself empty. A data row inserted into the
542
- table is routed to a partition based on the value of columns or
543
- expressions in the partition key. If no existing partition matches
544
- the values in the new row, an error will be reported.
545
- </para>
546
-
547
- <para>
548
- Partitioned tables do not support <literal>EXCLUDE</literal> constraints;
549
- however, you can define these constraints on individual partitions.
550
- Also, while it's possible to define <literal>PRIMARY KEY</literal>
551
- constraints on partitioned tables, creating foreign keys that
552
- reference a partitioned table is not yet supported.
553
- </para>
554
-
555
- </listitem>
556
- </varlistentry>
557
-
558
563
<varlistentry>
559
564
<term><literal>LIKE <replaceable>source_table</replaceable> [ <replaceable>like_option</replaceable> ... ]</literal></term>
560
565
<listitem>
0 commit comments