From 359459a44d0099d91c2bf9a16267f4726c4d33fb Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 12 Jan 2001 05:06:40 +0000 Subject: [PATCH] Bring CREATE TABLE syntax synopsis into line with reality; update a bunch of old or poorly-worded documentation. --- doc/src/sgml/ref/create_table.sgml | 579 ++++++++++++----------------- 1 file changed, 242 insertions(+), 337 deletions(-) diff --git a/doc/src/sgml/ref/create_table.sgml b/doc/src/sgml/ref/create_table.sgml index fc0d98be25..70b845e531 100644 --- a/doc/src/sgml/ref/create_table.sgml +++ b/doc/src/sgml/ref/create_table.sgml @@ -1,5 +1,5 @@ @@ -20,18 +20,31 @@ Postgres documentation - 2001-01-04 + 2001-01-11 -CREATE [ TEMPORARY | TEMP ] TABLE table ( - column type - [ NULL | NOT NULL ] [ UNIQUE ] [ DEFAULT value ] - [column_constraint_clause | PRIMARY KEY } [ ... ] ] - [, ... ] - [, PRIMARY KEY ( column [, ...] ) ] - [, CHECK ( condition ) ] - [, table_constraint_clause ] - ) [ INHERITS ( inherited_table [, ...] ) ] +CREATE [ TEMPORARY | TEMP ] TABLE table_name ( + { column_name type [ column_constraint [ ... ] ] + | table_constraint } [, ... ] + ) [ INHERITS ( inherited_table [, ... ] ) ] + +where column_constraint can be: +[ CONSTRAINT constraint_name ] +{ NOT NULL | NULL | UNIQUE | PRIMARY KEY | DEFAULT value | CHECK (condition) | + REFERENCES table [ ( column ) ] [ MATCH FULL | MATCH PARTIAL ] + [ ON DELETE action ] [ ON UPDATE action ] + [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] +} + +and table_constraint can be: +[ CONSTRAINT constraint_name ] +{ UNIQUE ( column_name [, ... ] ) | + PRIMARY KEY ( column_name [, ... ] ) | + CHECK ( condition ) | + FOREIGN KEY ( column_name [, ... ] ) REFERENCES table [ ( column [, ... ] ) ] + [ MATCH FULL | MATCH PARTIAL ] [ ON DELETE action ] [ ON UPDATE action ] + [ DEFERRABLE | NOT DEFERRABLE ] [ INITIALLY DEFERRED | INITIALLY IMMEDIATE ] +} @@ -43,19 +56,21 @@ CREATE [ TEMPORARY | TEMP ] TABLE table - TEMPORARY + TEMPORARY or TEMP - The table is created only for this session, and is + If specified, the table is created only for this session, and is automatically dropped on session exit. Existing permanent tables with the same name are not visible - while the temporary table exists. + (in this session) while the temporary table exists. + Any indexes created on a temporary table are automatically + temporary as well. - table + table_name The name of the new table to be created. @@ -64,10 +79,10 @@ CREATE [ TEMPORARY | TEMP ] TABLE table - column + column_name - The name of a column. + The name of a column to be created in the new table. @@ -84,53 +99,7 @@ CREATE [ TEMPORARY | TEMP ] TABLE table - DEFAULT value - - - A default value for a column. - See the DEFAULT clause for more information. - - - - - - column_constraint_clause - - - The optional column constraint clauses specify a list of - integrity constraints or tests which new or updated entries must - satisfy for an insert or update operation to succeed. Each - constraint must evaluate to a boolean expression. Although - SQL92 requires the column_constraint_clause to - refer to that column only, Postgres - allows multiple columns to be referenced within a single column - constraint. See the column constraint clause for more - information. - - - - - - table_constraint_clause - - - The optional table CONSTRAINT clause specifies a - list of integrity constraints which new or updated entries must - satisfy for an insert or update operation to succeed. Each - constraint must evaluate to a boolean expression. Multiple - columns may be referenced within a single constraint. Only one - PRIMARY KEY clause may be specified for a table; - PRIMARY KEY column (a table - constraint) and PRIMARY KEY (a column constraint) - are mutually exclusive. See the table constraint clause for - more information. - - - - - - INHERITS inherited_table + inherited_table The optional INHERITS clause specifies a list of table @@ -144,6 +113,72 @@ CREATE [ TEMPORARY | TEMP ] TABLE table + + + constraint_name + + + An optional name for a column or table constraint. If not specified, + the system generates a name. + + + + + + value + + + A default value for a column. + See the DEFAULT clause for more information. + + + + + + condition + + + CHECK clauses specify integrity constraints or tests which new or + updated rows must satisfy for an insert or update operation to + succeed. Each constraint must be an expression producing + a boolean result. + A condition appearing within a column definition should reference + that column's value only, while a condition appearing as a table + constraint may reference multiple columns. + + + + + + table + + + The name of an existing table to be referenced by a foreign + key constraint. + + + + + + column + + + The name of a column in an existing table to be referenced by a + foreign key constraint. If not specified, the primary key of + the existing table is assumed. + + + + + + action + + + A keyword indicating the action to take when a foreign key + constraint is violated. + + + @@ -182,18 +217,6 @@ ERROR: Relation 'table' already ex - - - -ERROR: DEFAULT: type mismatched - - - - If data type of default value doesn't match the - column definition's data type. - - - @@ -205,8 +228,8 @@ ERROR: DEFAULT: type mismatched - CREATE TABLE will enter a new table - into the current data base. The table will be "owned" by the user issuing the + CREATE TABLE will enter a new, initially empty table + into the current database. The table will be "owned" by the user issuing the command. @@ -228,6 +251,13 @@ ERROR: DEFAULT: type mismatched + + CREATE TABLE also automatically creates a data type + that represents the tuple type (structure type) corresponding to one + row of the table. Therefore, tables can't have the same name as any + existing datatype. + + The optional INHERITS clause specifies a collection of table names from which this table @@ -239,15 +269,6 @@ ERROR: DEFAULT: type mismatched - Each new table table - is automatically created as a type. Therefore, one or more rows - from the table are automatically a type and can be used in - - or other CREATE TABLE statements. - - - - The new table is created as a heap with no initial data. A table can have no more than 1600 columns (in practice, the effective limit is lower because of tuple-length constraints). A table cannot have the same name as a system catalog table. @@ -263,179 +284,71 @@ ERROR: DEFAULT: type mismatched DEFAULT value - - - Inputs - - - - - value - - - The possible values for the default value expression are: - - - - a literal value - - - - - a user function - - - - - a niladic function - - - - - - - - - + + The DEFAULT clause assigns a default data value for the column whose + column definition it appears within. The value is any variable-free + expression (note that sub-selects and cross-references to other + columns in the current table are not supported). + The data type of a default value must match the column definition's + data type. + + + + The DEFAULT expression will be used in any INSERT operation that does + not specify a value for the column. If there is no DEFAULT clause, + then the default is NULL. + - - Outputs - - - None. - - - - - - Description - - - The DEFAULT clause assigns a default data value to a column - (via a column definition in the CREATE TABLE statement). - The data type of a default value must match the column definition's - data type. - - - An INSERT operation that includes a column without a specified - default value will assign the NULL value to the column - if no explicit data value is provided for it. - Default literal means - that the default is the specified constant value. - Default niladic-function - or user-function means - that the default - is the value of the specified function at the time of the INSERT. - - - There are two types of niladic functions: - - - niladic USER - - - - CURRENT_USER / USER - - See CURRENT_USER function - - - - SESSION_USER - - See CURRENT_USER function - - - - SYSTEM_USER - - Not implemented - - - - - - - niladic datetime - - - - CURRENT_DATE - - See CURRENT_DATE function - - - - CURRENT_TIME - - See CURRENT_TIME function - - - - CURRENT_TIMESTAMP - - See CURRENT_TIMESTAMP function - - - - - - - - - - Usage - To assign a constant value as the default for the - columns did and number, - and a string literal to the column did: - - -CREATE TABLE video_sales ( - did VARCHAR(40) DEFAULT 'luso films', - number INTEGER DEFAULT 0, - total CASH DEFAULT '$0.0' -); - - - - To assign an existing sequence - as the default for the column did, - and a literal to the column name: - CREATE TABLE distributors ( - did DECIMAL(3) DEFAULT NEXTVAL('serial'), - name VARCHAR(40) DEFAULT 'luso films' + name VARCHAR(40) DEFAULT 'luso films', + did INTEGER DEFAULT NEXTVAL('distributors_serial'), + modtime TIMESTAMP DEFAULT now() ); + The above assigns a literal constant default value for the column + name, and arranges for the default value of column + did to be generated by selecting the next value of a + sequence object. The default value of modtime will + be the time at which the row is inserted. + + + + It is worth remarking that + + modtime TIMESTAMP DEFAULT 'now' + + would produce a result that is probably not the intended one: the + string 'now' will be coerced to a timestamp value + immediately, and so the default value of modtime will + always be the time of table creation. This difficulty is avoided by + specifying the default value as a function call. - Column CONSTRAINT Clause + Column Constraints -[ CONSTRAINT name ] { [ - NULL | NOT NULL ] | UNIQUE | PRIMARY KEY | CHECK constraint | REFERENCES - reftable - (refcolumn) +[ CONSTRAINT constraint_name ] { + NULL | NOT NULL | UNIQUE | PRIMARY KEY | CHECK condition | + REFERENCES reftable [ ( refcolumn ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] [ [ NOT ] DEFERRABLE ] [ INITIALLY checktime ] } - [, ...] @@ -447,14 +360,10 @@ CREATE TABLE distributors ( - name + constraint_name - An arbitrary name given to the integrity constraint. - If name is not specified, - it is generated from the table and column names, - which should ensure uniqueness for - name. + An arbitrary name given to a constraint clause. @@ -484,7 +393,7 @@ CREATE TABLE distributors ( The column must have unique values. In Postgres - this is enforced by an implicit creation of a unique index on the table. + this is enforced by automatic creation of a unique index on the column. @@ -493,9 +402,9 @@ CREATE TABLE distributors ( PRIMARY KEY - This column is a primary key, which implies that uniqueness is - enforced by the system and that other tables may rely on this - column as a unique identifier for rows. See PRIMARY KEY for more + This column is a primary key, which implies that other tables may rely + on this column as a unique identifier for rows. Both UNIQUE and + NOT NULL are implied by PRIMARY KEY. See PRIMARY KEY for more information. @@ -503,11 +412,11 @@ CREATE TABLE distributors ( -constraint +condition - The definition of the constraint. + An arbitrary boolean-valued constraint condition. @@ -522,17 +431,14 @@ CREATE TABLE distributors ( The optional constraint clauses specify constraints or tests which - new or updated entries must satisfy for an insert or update - operation to succeed. Each constraint must evaluate to a boolean - expression. Multiple attributes may be referenced within a single - constraint. The use of PRIMARY KEY as a table constraint is mutually - incompatible with PRIMARY KEY as a column constraint. + new or updated rows must satisfy for an insert or update + operation to succeed. A constraint is a named rule: an SQL object which helps define valid sets of values by putting limits on the results of INSERT, - UPDATE or DELETE operations performed on a Base Table. + UPDATE or DELETE operations performed on a table. @@ -615,7 +521,7 @@ ERROR: ExecAppend: Fail to add null value in not null attribute " Define two NOT NULL column constraints on the table distributors, - one of which being a named constraint: + one of which is explicitly given a name: CREATE TABLE distributors ( @@ -632,7 +538,7 @@ CREATE TABLE distributors ( UNIQUE Constraint -[ CONSTRAINT name ] UNIQUE +[ CONSTRAINT constraint_name ] UNIQUE @@ -641,10 +547,10 @@ CREATE TABLE distributors ( - CONSTRAINT name + constraint_name - An arbitrary label given to a constraint. + An arbitrary name given to a constraint clause. @@ -718,9 +624,7 @@ ERROR: Cannot insert a duplicate key into a unique index. - Defines a UNIQUE column constraint for the table distributors. - UNIQUE column constraints can only be defined on one column - of the table: + Defines a UNIQUE constraint for the name column: CREATE TABLE distributors ( did DECIMAL(3), @@ -745,8 +649,7 @@ CREATE TABLE distributors ( The CHECK Constraint -[ CONSTRAINT name ] CHECK - ( condition [, ...] ) +[ CONSTRAINT constraint_name ] CHECK ( condition ) Inputs @@ -754,10 +657,10 @@ CREATE TABLE distributors ( - name + constraint_name - An arbitrary name given to a constraint. + An arbitrary name given to a constraint clause. @@ -788,7 +691,7 @@ CREATE TABLE distributors ( -ERROR: ExecAppend: rejected due to CHECK constraint "table_column". +ERROR: ExecAppend: rejected due to CHECK constraint "constraint_name". @@ -808,14 +711,25 @@ ERROR: ExecAppend: rejected due to CHECK constraint "name ] PRIMARY KEY +[ CONSTRAINT constraint_name ] PRIMARY KEY @@ -833,10 +747,10 @@ ERROR: ExecAppend: rejected due to CHECK constraint "name + constraint_name - An arbitrary name for the constraint. + An arbitrary name given to a constraint clause. @@ -871,7 +785,8 @@ ERROR: Cannot insert a duplicate key into a unique index. constraint. - Only one PRIMARY KEY can be specified for a table. + Only one PRIMARY KEY can be specified for a table, whether as a + column constraint or a table constraint. @@ -903,7 +818,7 @@ ERROR: Cannot insert a duplicate key into a unique index. REFERENCES Constraint -[ CONSTRAINT name ] REFERENCES reftable [ ( refcolumn ) ] +[ CONSTRAINT constraint_name ] REFERENCES reftable [ ( refcolumn ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] @@ -923,10 +838,10 @@ ERROR: Cannot insert a duplicate key into a unique index. - CONSTRAINT name + constraint_name - An arbitrary name for the constraint. + An arbitrary name given to a constraint clause. @@ -958,7 +873,7 @@ ERROR: Cannot insert a duplicate key into a unique index. default match type if none is specified. MATCH FULL will not allow one column of a multi-column foreign key to be NULL unless all foreign key columns are NULL. The default MATCH type - allows a some foreign key columns to be NULL while other parts + allows some foreign key columns to be NULL while other parts of the foreign key are not NULL. MATCH PARTIAL is currently not supported. @@ -1184,15 +1099,14 @@ ERROR: name referential integrity - Table CONSTRAINT Clause + Table Constraints -[ CONSTRAINT name ] { PRIMARY KEY | UNIQUE } ( column [, ...] ) +[ CONSTRAINT name ] { PRIMARY KEY | UNIQUE } ( column [, ... ] ) [ CONSTRAINT name ] CHECK ( constraint ) -[ CONSTRAINT name ] FOREIGN KEY ( column [, ...] ) - REFERENCES reftable - (refcolumn [, ...] ) +[ CONSTRAINT name ] FOREIGN KEY ( column [, ... ] ) + REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] @@ -1209,15 +1123,15 @@ ERROR: name referential integrity - CONSTRAINT name + constraint_name - An arbitrary name given to an integrity constraint. + An arbitrary name given to a constraint clause. - column [, ...] + column [, ... ] The column name(s) for which to define a unique index @@ -1255,7 +1169,7 @@ ERROR: name referential integrity A table constraint is an integrity constraint defined on one or - more columns of a base table. The four variations of "Table + more columns of a table. The four variations of "Table Constraint" are: UNIQUE @@ -1272,17 +1186,17 @@ ERROR: name referential integrity -[ CONSTRAINT name ] UNIQUE ( column [, ...] ) +[ CONSTRAINT constraint_name ] UNIQUE ( column [, ... ] ) Inputs - CONSTRAINT name + constraint_name - An arbitrary name given to a constraint. + An arbitrary name given to a constraint clause. @@ -1346,12 +1260,12 @@ ERROR: name referential integrity - Define a UNIQUE table constraint for the table distributors: + Prevent duplicate rows in the table distributors: CREATE TABLE distributors ( did DECIMAL(3), name VARCHAR(40), - UNIQUE(name) + UNIQUE(did,name) ); @@ -1364,7 +1278,7 @@ CREATE TABLE distributors ( -[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) +[ CONSTRAINT constraint_name ] PRIMARY KEY ( column [, ... ] ) @@ -1373,15 +1287,15 @@ CREATE TABLE distributors ( - CONSTRAINT name + constraint_name - An arbitrary name for the constraint. + An arbitrary name given to a constraint clause. - column [, ...] + column [, ... ] The names of one or more columns in the table. @@ -1445,8 +1359,8 @@ CREATE TABLE distributors ( REFERENCES Constraint -[ CONSTRAINT name ] FOREIGN KEY ( column [, ...] ) - REFERENCES reftable [ ( refcolumn [, ...] ) ] +[ CONSTRAINT constraint_name ] FOREIGN KEY ( column [, ... ] ) + REFERENCES reftable [ ( refcolumn [, ... ] ) ] [ MATCH matchtype ] [ ON DELETE action ] [ ON UPDATE action ] @@ -1454,9 +1368,9 @@ CREATE TABLE distributors ( [ INITIALLY checktime ] - The REFERENCES constraint specifies a rule that a column value is - checked against the values of another column. REFERENCES can also be - specified as part of a FOREIGN KEY table constraint. + The REFERENCES constraint specifies a rule that a column value or set + of column values is + checked against the values in another table. @@ -1464,15 +1378,15 @@ CREATE TABLE distributors ( - CONSTRAINT name + constraint_name - An arbitrary name for the constraint. + An arbitrary name given to a constraint clause. - column [, ...] + column [, ... ] The names of one or more columns in the table. @@ -1488,10 +1402,10 @@ CREATE TABLE distributors ( - referenced column [, ...] + referenced column [, ... ] - One or more column in the reftable + One or more columns in the reftable to check the data against. If this is not specified, the PRIMARY KEY of the reftable is used. @@ -1848,32 +1762,23 @@ CREATE TABLE distributors ( ON COMMIT clause: CREATE GLOBAL TEMPORARY TABLE table ( column type [ - DEFAULT value ] [ CONSTRAINT column_constraint ] [, ...] ) + DEFAULT value ] [ CONSTRAINT column_constraint ] [, ... ] ) [ CONSTRAINT table_constraint ] [ ON COMMIT { DELETE | PRESERVE } ROWS ] For temporary tables, the CREATE GLOBAL TEMPORARY TABLE statement - names a new table visible to other clients and defines the table's columns and - constraints. + names a new table visible to other clients and defines the table's columns + and constraints. The optional ON COMMIT clause of CREATE TEMPORARY TABLE specifies whether or not the temporary table should be emptied of rows - whenever COMMIT is executed. If the ON COMMIT clause is omitted, the - default option, ON COMMIT DELETE ROWS, is assumed. - - - To create a temporary table: - - -CREATE TEMPORARY TABLE actors ( - id DECIMAL(3), - name VARCHAR(40), - CONSTRAINT actor_id CHECK (id < 150) -) ON COMMIT DELETE ROWS; - + whenever COMMIT is executed. If the ON COMMIT clause is omitted, SQL92 + specifies that the default is ON COMMIT DELETE ROWS. However, + Postgres' behavior is always like + ON COMMIT PRESERVE ROWS. @@ -1887,7 +1792,7 @@ CREATE TEMPORARY TABLE actors ( Table Constraint definition: -[ CONSTRAINT name ] UNIQUE ( column [, ...] ) +[ CONSTRAINT constraint_name ] UNIQUE ( column [, ... ] ) [ { INITIALLY DEFERRED | INITIALLY IMMEDIATE } ] [ [ NOT ] DEFERRABLE ] @@ -1897,7 +1802,7 @@ CREATE TEMPORARY TABLE actors ( Column Constraint definition: -[ CONSTRAINT name ] UNIQUE +[ CONSTRAINT constraint_name ] UNIQUE [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -1910,11 +1815,12 @@ CREATE TEMPORARY TABLE actors ( The NULL "constraint" (actually a non-constraint) is a - Postgres extension to SQL92 is - included for symmetry with the NOT NULL clause. Since it is the + Postgres extension to SQL92 that is + included for symmetry with the NOT NULL clause (and for compatibility + with some other RDBMSes). Since it is the default for any column, its presence is simply noise. -[ CONSTRAINT name ] NULL +[ CONSTRAINT constraint_name ] NULL @@ -1927,7 +1833,7 @@ CREATE TEMPORARY TABLE actors ( SQL92 specifies some additional capabilities for NOT NULL: -[ CONSTRAINT name ] NOT NULL +[ CONSTRAINT constraint_name ] NOT NULL [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -1973,7 +1879,7 @@ DEFAULT niladic_user_function | niladic_datetime_function | NULL An assertion is a special type of integrity constraint and shares the same namespace as other constraints. However, an assertion is - not necessarily dependent on one particular base table as + not necessarily dependent on one particular table as constraints are, so SQL-92 provides the CREATE ASSERTION statement as an alternate method for defining a constraint: @@ -1989,7 +1895,7 @@ CREATE ASSERTION name CHECK ( condition< Domain constraint: -[ CONSTRAINT name ] CHECK constraint +[ CONSTRAINT constraint_name ] CHECK constraint [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -1999,7 +1905,7 @@ CREATE ASSERTION name CHECK ( condition< Table constraint definition: -[ CONSTRAINT name ] { PRIMARY KEY ( column, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint } +[ CONSTRAINT constraint_name ] { PRIMARY KEY ( column, ... ) | FOREIGN KEY constraint | UNIQUE constraint | CHECK constraint } [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -2009,7 +1915,7 @@ CREATE ASSERTION name CHECK ( condition< Column constraint definition: -[ CONSTRAINT name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint } +[ CONSTRAINT constraint_name ] { NOT NULL | PRIMARY KEY | FOREIGN KEY constraint | UNIQUE | CHECK constraint } [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -2051,8 +1957,7 @@ CREATE ASSERTION name CHECK ( condition< INITIALLY IMMEDIATE - Check constraint only at the end of the transaction. This - is the default + Check constraint after each statement. This is the default. @@ -2060,7 +1965,7 @@ CREATE ASSERTION name CHECK ( condition< INITIALLY DEFERRED - Check constraint after each statement. + Check constraint only at the end of the transaction. @@ -2090,7 +1995,7 @@ affect a column or a table. table constraint definition: -[ CONSTRAINT name ] CHECK ( VALUE condition ) +[ CONSTRAINT constraint_name ] CHECK ( VALUE condition ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -2099,7 +2004,7 @@ affect a column or a table. column constraint definition: -[ CONSTRAINT name ] CHECK ( VALUE condition ) +[ CONSTRAINT constraint_name ] CHECK ( VALUE condition ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -2138,7 +2043,7 @@ ALTER DOMAIN cities Table Constraint definition: -[ CONSTRAINT name ] PRIMARY KEY ( column [, ...] ) +[ CONSTRAINT constraint_name ] PRIMARY KEY ( column [, ... ] ) [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ] @@ -2146,7 +2051,7 @@ ALTER DOMAIN cities Column Constraint definition: -[ CONSTRAINT name ] PRIMARY KEY +[ CONSTRAINT constraint_name ] PRIMARY KEY [ {INITIALLY DEFERRED | INITIALLY IMMEDIATE} ] [ [ NOT ] DEFERRABLE ]