@@ -80,7 +80,7 @@ CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI
80
80
UNIQUE [ NULLS [ NOT ] DISTINCT ] ( <replaceable class="parameter">column_name</replaceable> [, ... ] [, <replaceable class="parameter">column_name</replaceable> WITHOUT OVERLAPS ] ) <replaceable class="parameter">index_parameters</replaceable> |
81
81
PRIMARY KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] [, <replaceable class="parameter">column_name</replaceable> WITHOUT OVERLAPS ] ) <replaceable class="parameter">index_parameters</replaceable> |
82
82
EXCLUDE [ USING <replaceable class="parameter">index_method</replaceable> ] ( <replaceable class="parameter">exclude_element</replaceable> WITH <replaceable class="parameter">operator</replaceable> [, ... ] ) <replaceable class="parameter">index_parameters</replaceable> [ WHERE ( <replaceable class="parameter">predicate</replaceable> ) ] |
83
- FOREIGN KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] ) REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ... ] ) ]
83
+ FOREIGN KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] [, PERIOD <replaceable class="parameter">column_name</replaceable> ] ) REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ... ] [, PERIOD <replaceable class="parameter">column_name</replaceable> ] ) ]
84
84
[ MATCH FULL | MATCH PARTIAL | MATCH SIMPLE ] [ ON DELETE <replaceable
85
85
class="parameter">referential_action</replaceable> ] [ ON UPDATE <replaceable class="parameter">referential_action</replaceable> ] }
86
86
[ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
@@ -1147,8 +1147,8 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
1147
1147
<varlistentry id="sql-createtable-parms-references">
1148
1148
<term><literal>REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> ) ] [ MATCH <replaceable class="parameter">matchtype</replaceable> ] [ ON DELETE <replaceable class="parameter">referential_action</replaceable> ] [ ON UPDATE <replaceable class="parameter">referential_action</replaceable> ]</literal> (column constraint)</term>
1149
1149
1150
- <term><literal>FOREIGN KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] )
1151
- REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ... ] ) ]
1150
+ <term><literal>FOREIGN KEY ( <replaceable class="parameter">column_name</replaceable> [, ... ] [, PERIOD <replaceable class="parameter">column_name</replaceable> ] )
1151
+ REFERENCES <replaceable class="parameter">reftable</replaceable> [ ( <replaceable class="parameter">refcolumn</replaceable> [, ... ] [, PERIOD <replaceable class="parameter">column_name</replaceable> ] ) ]
1152
1152
[ MATCH <replaceable class="parameter">matchtype</replaceable> ]
1153
1153
[ ON DELETE <replaceable class="parameter">referential_action</replaceable> ]
1154
1154
[ ON UPDATE <replaceable class="parameter">referential_action</replaceable> ]</literal>
@@ -1164,7 +1164,32 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
1164
1164
primary key of the <replaceable class="parameter">reftable</replaceable>
1165
1165
is used. Otherwise, the <replaceable class="parameter">refcolumn</replaceable>
1166
1166
list must refer to the columns of a non-deferrable unique or primary key
1167
- constraint or be the columns of a non-partial unique index. The user
1167
+ constraint or be the columns of a non-partial unique index.
1168
+ </para>
1169
+
1170
+ <para>
1171
+ If the last column is marked with <literal>PERIOD</literal>, it is
1172
+ treated in a special way. While the non-<literal>PERIOD</literal>
1173
+ columns are compared for equality (and there must be at least one of
1174
+ them), the <literal>PERIOD</literal> column is not. Instead, the
1175
+ constraint is considered satisfied if the referenced table has matching
1176
+ records (based on the non-<literal>PERIOD</literal> parts of the key)
1177
+ whose combined <literal>PERIOD</literal> values completely cover the
1178
+ referencing record's. In other words, the reference must have a
1179
+ referent for its entire duration. This column must be a range or
1180
+ multirange type. In addition, the referenced table must have a primary
1181
+ key or unique constraint declared with <literal>WITHOUT
1182
+ OVERLAPS</literal>. Finally, if the foreign key has a PERIOD
1183
+ <replaceable class="parameter">column_name</replaceable> specification
1184
+ the corresponding <replaceable class="parameter">refcolumn</replaceable>,
1185
+ if present, must also be marked <literal>PERIOD</literal>. If the
1186
+ <replaceable class="parameter">refcolumn</replaceable> clause is omitted,
1187
+ and thus the reftable's primary key constraint chosen, the primary key
1188
+ must have its final column marked <literal>WITHOUT OVERLAPS</literal>.
1189
+ </para>
1190
+
1191
+ <para>
1192
+ The user
1168
1193
must have <literal>REFERENCES</literal> permission on the referenced
1169
1194
table (either the whole table, or the specific referenced columns). The
1170
1195
addition of a foreign key constraint requires a
@@ -1238,6 +1263,10 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
1238
1263
values of the referencing column(s) to the new values of the
1239
1264
referenced columns, respectively.
1240
1265
</para>
1266
+
1267
+ <para>
1268
+ In a temporal foreign key, this option is not supported.
1269
+ </para>
1241
1270
</listitem>
1242
1271
</varlistentry>
1243
1272
@@ -1249,6 +1278,10 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
1249
1278
referencing columns, to null. A subset of columns can only be
1250
1279
specified for <literal>ON DELETE</literal> actions.
1251
1280
</para>
1281
+
1282
+ <para>
1283
+ In a temporal foreign key, this option is not supported.
1284
+ </para>
1252
1285
</listitem>
1253
1286
</varlistentry>
1254
1287
@@ -1262,6 +1295,10 @@ WITH ( MODULUS <replaceable class="parameter">numeric_literal</replaceable>, REM
1262
1295
(There must be a row in the referenced table matching the default
1263
1296
values, if they are not null, or the operation will fail.)
1264
1297
</para>
1298
+
1299
+ <para>
1300
+ In a temporal foreign key, this option is not supported.
1301
+ </para>
1265
1302
</listitem>
1266
1303
</varlistentry>
1267
1304
</variablelist>
0 commit comments