The keyword which defines a table as having a temporary lifespan. Such a table will be destroyed after the user's session has ended. Any table-related constructions (such as indices and constraints) will also be destroyed with the table at the end of the session.
If a temporary table is given the same name as an existing permanent table, only the temporary table will be accessible by the session which created it. This will cause problems, since it will implicitly take precedence over the permanent table within the current session until it is destroyed.
table_name
The name of the table you are creating.
column_name
The name of a column within the new table. Multiple column definitions are specified within parentheses, separated by commas.
type
The type of a specified column, immediately following a column name. This can be a standard type or an array of a standard type.
column_constraint
A complete constraint definition for a column. Here are the parameters available for a column constraint:
column_constraint_name
The optional name for a constraint clause.
NULL
The clause used to explicitly allow the column to contain NULL values. This option is set by default.
NOT NULL
The clause used to forbid the use of a NULL value for this column. You can accomplish this by using the CHECK (columnNOT NULL) column constraint.
UNIQUE
The clause used to force all rows within a column to have unique values (unique within the table). This is enforced by the creation of a unique index on the column.
PRIMARY KEY
The clause used to set a column as a primary key for the table. Other tables rely on primary keys to act as the identifying column for each row. A primary key is effectively the same as a column created with the UNIQUE and NOT NULL clauses.
DEFAULT
The clause used to set a default value for a column. Such a value is used if an input value is not provided for the column by an INSERT statement. Without an explicit default_value, a column defaults to contain NULL.
CHECK
The clause used to have values checked against a specified condition. If the condition yields false on an INSERT or UPDATE, the statement will fail.
condition
An arbitrary conditional expression yielding a Boolean value, following the CHECK clause.
REFERENCES
The clause used to verify column values against the values of a column in another table. (See Chapter 7 for more on this creating and using this constraint.)
foreign_table
The name of a table you wish to be referenced by a foreign key constraint.
foreign_column
The name of a column in another table which you are referencing in a foreign key constraint. The column must reside within an existing table. If no column name is given, the database will use the referenced table's primary key is used.
MATCH FULL | MATCH PARTIAL
The MATCH clause affects what kind of NULL and non-NULL values are allowed to be mixed on insertion into a table whose foreign key references multiple columns. The MATCH clause is therefore only practically applicable to table constraints, though the syntax is technically valid in a column constraint as well.
MATCH FULL disallows insertion of row data whose columns contain NULL values unless all referenced columns are NULL. MATCH PARTIAL is not supported as of PostgreSQL 7.1.x. Not specifying either clause allows NULL columns to satisfy the constraint.
ON DELETE
The ON DELETE clause indicates that when a DELETE is executed on a referenced row in the referenced table, one of the following actions will be executed upon the constrained column, as specified by action:
NO ACTION
The NO ACTION clause produces an error if the reference is violated. This is the default if action is not specified.
RESTRICT
The RESTRICT keyword is identical to NO ACTION.
CASCADE
The CASCADE keyword removes all rows which reference the deleted row. Exercise caution with this action.
SET NULL
The SET NULL clause assigns a NULL value to all referenced column values.
SET DEFAULT
The SET DEFAULT clause sets all referenced columns to their default values.
Note that specifying CASCADE as the ON UPDATE action updates all of the rows which reference the updated row with the new value (rather than deleting them, as would be the case with ON DELETE CASCADE).
ON UPDATE
The ON DELETE clause indicates that when an UPDATE statement is performed on a referenced row in the referenced table, the same actions are available as with the ON DELETE clause. The default action is also NO ACTION.
Specifying CASCADE as the ON UPDATE action updates all of the rows which reference the updated row with the new value (rather than deleting them, as would be the case with ON DELETE CASCADE).
DEFERRABLE | NOT DEFERRABLE
The DEFERRABLE clause gives you the option of postponing enforcement of the constraint to the end of a transaction rather than having it enforced at the end of each statement. Use the INITIALLY clause to specify the initial point at which the constraint will be enforced.
The NOT DEFERRABLE clause indicates the enforcement of the constraint must always be done immediately as each statement is executed. This is the default.
INITIALLY DEFERRED | INITIALLY IMMEDIATE
The INITIALLY DEFERRED clause postpones constraint enforcement until the end of the transaction, whereas INITIALLY IMMEDIATE causes constraint checking to be performed after each statement. The INITIALLY IMMEDIATE clause is the default.
table_constraint
A complete table constraint definition for the table being created. A table constraint can affect multiple columns, whereas a column constraint only creates a constraint for a single column. Here are the parameters available for a table constraint:
table_constraint_name
The optional name for the constraint to be created.
column_name[, ...]
The name of the column (or comma-delimited list of columns) to which the table constraint applies.
PRIMARY KEY | UNIQUE
The table constraint keywords that apply an implicit index. Use the UNIQUE keyword to have the specified column's value checked for duplicate values. Any attempt to insert new rows that do not contain a unique value for the specified column (or columns) will fail if this constraint is used.
Use the PRIMARY KEY keywords to both check for duplicate values, and to disallow NULL values on the specified column, or columns.
CHECK (condition )
The conditional CHECK constraint keyword. Use this keyword to check a value against the evaluated boolean condition before a new row is inserted; if the check fails (i.e., condition returned false), the row is not added.
FOREIGN KEY
The FOREIGN KEY constraint keyword. Use this keyword to identify a column in another table that will be referenced as a foreign key relation (see Chapter 7 for more on this constraint). The remainder of this clause is identical to the REFERENCES clause of a column constraint.
inherited_table
The name of a table from which the new table should inherit columns. If there are any column names inherited that match column names you've already specified as columns for the new table, PostgreSQL will display an error and terminate execution of the command.
Results
CREATE
The message returned when a table is successfully created.
ERROR: Relation 'table_name' already exists
The error returned if a table named table_name already exists.
ERROR: CREATE TABLE: attribute "b" duplicated
The error returned a column name is listed twice.
ERROR: Unable to locate type name 'type' in catalog
The error returned if a specified column type does not exist.
ERROR: Illegal class name 'table_name'
The error returned if table_name begins with pg_.
Description
Use the CREATE TABLE command to add a new table to the database to which you are connected. After it is created, the new table will be completely empty, and its ownership will be set to the user who issued the CREATE TABLE command.
You must supply a name and data type for each column of which the new table will be comprised (except for inherited columns, for which this data will be derived from the parent table). The name supplied may be up to 31 characters in length, and will be folded to lowercase unless placed within double quotes. The data type can be a standard type (e.g., int4, char), or an array type (a standard type, followed by square brackets, such as float4[]).
You may set a variety of constraints on a column, such as the NOT NULL clause, which disallows NULL values from being inserted into the column.
Warning
Tables cannot have the same name as existing data types; nor can they have the same names as system catalog tables, or even be prefixed with pg_, which is the reserved system table prefix.
A table can have a maximum of about 1,600 columns. Due to tuple-length issues, this number is lower in practice.
For more information about creating tables, see Chapter 4. For more information about column and table constraints in general, see Chapter 7.
Examples
The following example creates a table called shipments. It places the NOT NULL constraint and DEFAULT constraints on its id column:
booktown=# CREATE TABLE shipments (
booktown(# id integer NOT NULL DEFAULT nextval('shipments_ship_id_seq'),
booktown(# customer_id integer,
booktown(# isbn text,
booktown(# ship_date timestamp);
CREATE