- class="PARAMETER">newcolumn
+ class="PARAMETER">new_column
ALTER TABLE table
RENAME TO new_table
ALTER TABLE table
ADD table_constraint_definition
ALTER TABLE [ ONLY ] table
- DROP CONSTRAINT constraint { RESTRICT | CASCADE }
+ DROP CONSTRAINT constraint_name { RESTRICT | CASCADE }
ALTER TABLE table
OWNER TO new_owner
table
- The name of an existing table to alter.
+ The name (possibly schema-qualified) of an existing table to alter.
- newcolumn
+ new_column
New name for an existing column.
table_constraint_definition
- New table constraint for the table
+ New table constraint for the table.
+
+
+
+
+
+ constraint_name
+
+ Name of an existing constraint to drop.
ALTER TABLE changes the definition of an existing table.
- The ADD COLUMN form adds a new column to the table
- using the same syntax as .
- The ALTER COLUMN SET/DROP DEFAULT forms
- allow you to set or remove the default for the column. Note that defaults
- only apply to subsequent INSERT commands; they do not
- cause rows already in the table to change.
- The ALTER COLUMN SET/DROP NOT NULL forms allow you to
- change whether a column is marked to allow NULL values or to reject NULL
- values.
- The ALTER COLUMN SET STATISTICS form allows you to
- set the statistics-gathering target for subsequent
- operations.
- The ALTER COLUMN SET STORAGE form allows the
- column storage mode to be set. This controls whether this column is
- held inline or in a supplementary table, and whether the data
- should be compressed or not. PLAIN must be used
- for fixed-length values such as INTEGER and is
- inline, uncompressed. MAIN is for inline,
- compressible data. EXTERNAL is for external,
- uncompressed data and EXTENDED is for external,
- compressed data. The use of EXTERNAL will make
- substring operations on a column faster, at the penalty of
- increased storage space.
- The RENAME clause causes the name of a table,
- column, index, sequence or view to change without changing any of the
- data. The data will remain of the same type and size after the
- command is executed.
- The ADD table_constraint_definition clause
- adds a new constraint to the table using the same syntax as
- linkend="SQL-CREATETABLE" endterm="SQL-CREATETABLE-TITLE">.
- The DROP CONSTRAINT constraint clause
- drops all constraints on the table (and its children) that match constraint.
- The OWNER clause changes the owner of the table, index, sequence or view to the
- user new user.
+ There are several sub-forms:
+
+
+
+ ADD COLUMN
+
+ This form adds a new column to the table using the same syntax as
+ .
+
+
+
+
+
+ SET/DROP DEFAULT
+
+ These forms set or remove the default value for a column. Note
+ that defaults only apply to subsequent INSERT
+ commands; they do not cause rows already in the table to change.
+ Defaults may also be created for views, in which case they are
+ inserted into INSERT> statements on the view before
+ the view's ON INSERT rule is applied.
+
+
+
+
+
+ SET/DROP NOT NULL
+
+ These forms change whether a column is marked to allow NULL
+ values or to reject NULL values. You may only SET NOT NULL>
+ when the table contains no NULLs in the column.
+
+
+
+
+
+ SET STATISTICS
+
+ This form
+ sets the per-column statistics-gathering target for subsequent
+ operations.
+
+
+
+
+
+ SET STORAGE
+
+ This form sets the storage mode for a column. This controls whether this
+ column is held inline or in a supplementary table, and whether the data
+ should be compressed or not. PLAIN must be used
+ for fixed-length values such as INTEGER and is
+ inline, uncompressed. MAIN is for inline,
+ compressible data. EXTERNAL is for external,
+ uncompressed data and EXTENDED is for external,
+ compressed data. EXTENDED is the default for all
+ datatypes that support it. The use of EXTERNAL will
+ make substring operations on a TEXT column faster, at the penalty of
+ increased storage space.
+
+
+
+
+
+ RENAME
+
+ The RENAME forms change the name of a table
+ (or an index, sequence, or view) or the name of an individual column in
+ a table. There is no effect on the stored data.
+
+
+
+
+
+ ADD table_constraint_definition
+
+ This form adds a new constraint to a table using the same syntax as
+ .
+
+
+
+
+
+ DROP CONSTRAINT
+
+ This form drops constraints on a table (and its children).
+ Currently, constraints on tables are not required to have unique
+ names, so there may be more than one constraint matching the specified
+ name. All such constraints will be dropped.
+
+
+
+
+
+ OWNER
+
+ This form changes the owner of the table, index, sequence or view to the
+ specified user.
+
+
+
+
+
+
- You must own the table in order to change its schema.
+ You must own the table to use ALTER TABLE>; except for
+ ALTER TABLE OWNER>, which may only be executed by a superuser.
In the current implementation of ADD COLUMN,
default and NOT NULL clauses for the new column are not supported.
+ The new column always comes into being with all values NULL.
You can use the SET DEFAULT form
- of ALTER TABLE to set the default later.
+ of ALTER TABLE to set the default afterwards.
(You may also want to update the already existing rows to the
- new default value, using .)
+ new default value, using
+ .)
+ If you want to mark the column non-null, use the SET NOT NULL>
+ form after you've entered non-null values for the column in all rows.
In DROP CONSTRAINT, the RESTRICT keyword is required, although
dependencies are not yet checked. The CASCADE option is unsupported.
- Currently DROP CONSTRAINT drops only CHECK constraints.
+ Currently DROP CONSTRAINT only handles CHECK constraints.
To remove a PRIMARY or UNIQUE constraint, drop the
relevant index using the command.
To remove FOREIGN KEY constraints you need to recreate
- You must own the table in order to change it.
Changing any part of the schema of a system
catalog is not permitted.
- The PostgreSQL User's Guide has further
- information on inheritance.
Refer to CREATE TABLE for a further description
of valid arguments.
+ The PostgreSQL User's Guide has further
+ information on inheritance.
table
- The name of a specific table to analyze. Defaults to all tables.
+ The name (possibly schema-qualified) of a specific table to
+ analyze. Defaults to all tables in the current database.
table
- The name of a table.
+ The name (possibly schema-qualified) of a table.
- object_name, table_name,
- column_name, agg_name, func_name, op, rule_name, trigger_name
+ object_name,
+ table_name.column_name, agg_name, func_name, op, rule_name, trigger_name
- The name of the object to be be commented.
+ The name of the object to be be commented. Names of tables,
+ indexes, sequences, views, types, domains, functions, aggregates,
+ and operators may be schema-qualified.
table
- The name of an existing table.
+ The name (possibly schema-qualified) of an existing table.
name
- The name of an aggregate function to create.
+ The name (optionally schema-qualified) of an aggregate function to
+ create.
already provided, then CREATE AGGREGATE
can be used to provide the desired features.
+ If a schema name is given (for example, CREATE AGGREGATE
+ myschema.myagg ...>) then the aggregate function is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+
An aggregate function is identified by its name and input data type.
- Two aggregates can have the same name if they operate on different
- input types. The
+ Two aggregates in the same schema can have the same name if they operate on
+ different input types. The
name and input data type of an aggregate must also be distinct from
- the name and input data type of every ordinary function.
+ the name and input data type(s) of every ordinary function in the same
+ schema.
An aggregate function is made from one or two ordinary
relation
- Table name of the triggering relation.
+ The name (possibly schema-qualified) of the relation in which
+ the triggering events occur.
Description
- CREATE CONSTRAINT TRIGGER is used from inside of
+ CREATE CONSTRAINT TRIGGER is used within
CREATE/ALTER TABLE and by
pg_dump to create the special triggers for
referential integrity.
domainname
- The name of a domain to be created.
+ The name (optionally schema-qualified) of a domain to be created.
data_type
- The data type of the domain. This may include array specifiers.
+ The underlying data type of the domain. This may include array
+ specifiers.
Refer to the User's Guide for further
information about data types and arrays.
- CREATE DOMAIN allows the user to register a new user data
- domain with PostgreSQL for use in the current data base. The
- user who defines a domain becomes its owner.
- domainname is
- the name of the new type and must be unique within the
- types and domains defined for this database.
+ CREATE DOMAIN allows the user to register a new
+ data domain with
PostgreSQL> for use in the
+ current data base. The user who defines a domain becomes its owner.
+
+
+ If a schema name is given (for example, CREATE DOMAIN
+ myschema.mydomain ...>) then the domain is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+ The domain name must be unique among the types and domains existing
+ in its schema.
- The name of a function to create. The name need not be unique,
- because functions may be overloaded, but functions with the
- same name must have different argument types.
+ The name of a function to create. If a schema name is included,
+ then the function is created in the
+ specified schema. Otherwise it is created in the current schema (the
+ one at the front of the search path; see CURRENT_SCHEMA()>).
+ The name of the new function must not match any existing function
+ with the same argument types in the same schema. However, functions of
+ different argument types may share a name (this is called
+ overloading>).
A function that has one parameter and is named the same as its output
- datatype is considered to be a type coercion function>:
- it can be invoked to convert a value of its input datatype into a value
+ datatype (including the schema name) is considered to be a type
+ coercion function>: it can be invoked to convert a value of its input
+ datatype into a value
of its output datatype. For example,
SELECT CAST(42 AS text);
index_name
- The name of the index to be created.
+ The name of the index to be created. No schema name can be included
+ here; the index is always created in the same schema as its parent
+ table.
table
- The name of the table to be indexed.
+ The name (possibly schema-qualified) of the table to be indexed.
All functions and operators used in an index definition must be
- cacheable>, that is, their results must depend only on
+ immutable>, that is, their results must depend only on
their input arguments and never on any outside influence (such as
the contents of another table or the current time). This restriction
ensures that the behavior of the index is well-defined. To use a
- user-defined function in an index, remember to mark the function cacheable
+ user-defined function in an index, remember to mark the function immutable
when you create it.
The operator to be defined. See below for allowable characters.
+ The name may be schema-qualified, for example
+ CREATE OPERATOR myschema.+ (...)>.
name.
The user who defines an operator becomes its owner.
+ If a schema name is given then the operator is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+
+ Two operators in the same schema can have the same name if they operate on
+ different data types. This is called overloading>. The
+ system will attempt to pick the intended operator based on the actual
+ input data types when there is ambiguity.
+
+
The operator name
is a sequence of up to NAMEDATALEN>-1 (31 by default) characters
If specified, the sequence object is created only for this session,
and is automatically dropped on session exit.
Existing permanent sequences with the same name are not visible
- (in this session) while the temporary sequence exists.
+ (in this session) while the temporary sequence exists, unless
+ they are referenced with schema-qualified names.
seqname
- The name of a sequence to be created.
+ The name (optionally schema-qualified) of a sequence to be created.
The generator will be owned by the user issuing the command.
+ If a schema name is given then the sequence is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+ TEMP sequences exist in a special schema, so a schema name may not be
+ given when creating a TEMP sequence.
+ The sequence name must be distinct from the name of any other sequence,
+ table, index, or view in the same schema.
+
+
After a sequence is created, you use the functions
nextval,
command.
+ If a schema name is given (for example, CREATE TABLE
+ myschema.mytable ...>) then the table is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+ TEMP tables exist in a special schema, so a schema name may not be
+ given when creating a TEMP table.
+ The table name must be distinct from the name of any other table,
+ sequence, index, or view in the same schema.
+
+
CREATE TABLE also automatically creates a data
type that represents the tuple type (structure type) corresponding
to one row of the table. Therefore, tables cannot have the same
- name as any existing data type.
+ name as any existing data type in the same schema.
A table cannot have 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.
+ effective limit is lower because of tuple-length constraints).
If specified, the table is created as a temporary table.
Temporary tables are automatically dropped at the end of a
- session. Existing persistent tables with the same name are not
- visible to the current session while the temporary table exists.
+ session. Existing permanent tables with the same name are not
+ visible to the current session while the temporary table exists,
+ unless they are referenced with schema-qualified names.
Any indexes created on a temporary table are automatically
temporary as well.
table_name
- The name of the table to be created.
+ The name (optionally schema-qualified) of the table to be created.
creating a view, but it is really quite different: it creates a new
table and evaluates the query just once to fill the new table
initially. The new table will not track subsequent changes to the
- source tables of the query. In contrast, a view re-evaluates the
- underlying SELECT statements whenever it is
+ source tables of the query. In contrast, a view re-evaluates its
+ defining SELECT statement whenever it is
queried.
If specified, the table is created as a temporary table.
- Temporary tables are automatically dropped at the end of a
- session. Existing persistent tables with the same name are not
- visible to the current session while the temporary table exists.
- Any indexes created on a temporary table are automatically
- temporary as well.
-
-
- The LOCAL word is optional.
+ Refer to for details.
table_name
- The name of the new table to be created. This table must not
- already exist. However, a temporary table can be created that
- has the same name as an existing permanent table.
+ The name (optionally schema-qualified) of the table to be created.
typename
- The name of a type to be created.
+ The name (optionally schema-qualified) of a type to be created.
- CREATE TYPE allows the user to register a new user data
- type with PostgreSQL for use in the current data base. The
- user who defines a type becomes its owner.
- typename is
- the name of the new type and must be unique within the
- types defined for this database.
+ CREATE TYPE allows the user to register a new data
+ type with
PostgreSQL> for use in the current data base.
+ The user who defines a type becomes its owner.
+
+
+ If a schema name is given then the type is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+ The type name must be distinct from the name of any existing type or
+ domain in the same schema. (Because tables have associated datatypes,
+ type names also must not conflict with table names in the same schema.)
accessed like point[0]> and point[1]>.
Note that
this facility only works for fixed-length types whose internal form
- is exactly a sequence of N identical fields. A subscriptable
+ is exactly a sequence of N identical fixed-length fields. A subscriptable
variable-length type must have the generalized internal representation
used by array_in> and array_out>.
For historical reasons (i.e., this is clearly wrong but it's far too
view
- The name of a view to be created.
+ The name (optionally schema-qualified) of a view to be created.
query
- An SQL query which will provide the columns and rows of the view.
+ An SQL query (that is, a SELECT> statement)
+ which will provide the columns and rows of the view.
- Refer to the SELECT statement for more information
+ Refer to for more information
about valid arguments.
Description
- CREATE VIEW will define a view of a table.
+ CREATE VIEW will define a view of a query.
The view is not physically materialized. Instead, a query
- rewrite retrieve rule is automatically generated to support
- retrieve operations on views.
+ rewrite rule (an ON SELECT> rule) is automatically generated to
+ support SELECT operations on views.
+
+
+ If a schema name is given (for example, CREATE VIEW
+ myschema.myview ...>) then the view is created in the
+ specified schema. Otherwise it is created in the current schema (the one
+ at the front of the search path; see CURRENT_SCHEMA()>).
+ The view name must be distinct from the name of any other view, table,
+ sequence, or index in the same schema.
table
- The name of an existing table.
+ The name (optionally schema-qualified) of an existing table.
name
- The name of an existing aggregate function.
+ The name (optionally schema-qualified) of an existing aggregate function.
type
- The input data type of an existing aggregate function,
+ The input data type of the aggregate function,
or * if the function accepts any input type.
(Refer to the PostgreSQL User's Guide for
further information about data types.)
Description
- DROP AGGREGATE will remove all references to an existing
+ DROP AGGREGATE will delete an existing
aggregate definition. To execute this command the current
user must be the owner of the aggregate.
domainname
- The name of an existing domain.
+ The name (optionally schema-qualified) of an existing domain.
name
- The name of an existing function.
+ The name (optionally schema-qualified) of an existing function.
type
- The type of the function's parameters.
+ The type of a parameter of the function.
index_name
- The name of an index to remove.
+ The name (optionally schema-qualified) of an index to remove.
id
- The identifier of an existing operator.
+ The identifier (optionally schema-qualified) of an existing operator.
for information on how to create operators.
- It is the user's responsibility to remove any access methods and
+ It is the user's responsibility to remove any access method
operator classes that rely on the deleted operator.
relation
- The name of the relation the rule applies to.
+ The name (optionally schema-qualified) of the relation the rule
+ applies to.
name
- The name of a sequence.
+ The name (optionally schema-qualified) of a sequence.
name
- The name of an existing table to drop.
+ The name (optionally schema-qualified) of an existing table to drop.
DROP TABLE removes tables from the database.
- Only its owner may destroy a table. A table
- may be emptied of rows, but not destroyed, by using DELETE.
+ Only its owner may destroy a table. A table may be emptied of rows, but not
+ destroyed, by using DELETE.
If a table being destroyed has secondary indexes on it,
they will be removed first. The removal of just a
secondary index will not affect the contents of the underlying table.
+ DROP TABLE will also remove any rules or triggers
+ that exist for the target table.
+
- At present, to remove a referenced view you must drop
+ At present, to remove a referencing view you must drop
it explicitly.
table
- The name of a table.
+ The name (optionally schema-qualified) of a table.
Description
- DROP TRIGGER will remove all references to an existing
+ DROP TRIGGER will remove an existing
trigger definition. To execute this command the current
user must be the owner of the table for which the trigger is defined.
typename
- The name of an existing type.
+ The name (optionally schema-qualified) of an existing type.
name
- The name of an existing view.
+ The name (optionally schema-qualified) of an existing view.
Notes
- Refer to <command>CREATE VIEW>
+ Refer to <xref linkend="sql-createview">
for information on how to create views.
Notes
- At present, to remove a referenced view from a
+ At present, to remove a referencing view from a
you must drop it explicitly.
table
- The name of an existing table.
+ The name (optionally schema-qualified) of an existing table.
name
- The name of an existing table to lock.
+ The name (optionally schema-qualified) of an existing table to lock.
name
- The name of the specific table/database/index to be be reindexed.
+ The name of the specific table/database/index to be reindexed.
+ Table and index names may be schema-qualified.
table_name
- The name of an existing table or view. If ONLY is specified, only that
- table is scanned. If ONLY is not specified, the table and all its
- descendant tables (if any) are scanned. * can be appended to the
- table name to indicate that descendant tables are to be scanned,
- but in the current version, this is the default behavior.
- (In releases before 7.1, ONLY was the default behavior.)
+ The name (optionally schema-qualified) of an existing table or view.
+ If ONLY> is specified, only that table is scanned. If
+ ONLY> is not specified, the table and all its descendant
+ tables (if any) are scanned. *> can be appended to the
+ table name to indicate that descendant tables are to be scanned, but
+ in the current version, this is the default behavior. (In releases
+ before 7.1, ONLY> was the default behavior.)
TEMP
- If TEMPORARY or TEMP is specified,
- the output table is created only within this session, and is
- automatically dropped on session exit.
- Existing permanent tables with the same name are not visible
- (in this session) while the temporary table exists.
- Any indexes created on a temporary table are automatically
- temporary as well.
+ If specified, the table is created as a temporary table.
+ Refer to for details.
new_table
- The name of the new table to be created.
- This table must not already exist. However, a temporary table
- can be created that has the same name as an existing permanent
- table.
+ The name (optionally schema-qualified) of the table to be created.
name
- The name of the table to be truncated.
+ The name (optionally schema-qualified) of the table to be truncated.
table
- The name of an existing table.
+ The name (optionally schema-qualified) of an existing table.
table
- The name of a specific table to vacuum. Defaults to all tables
- in the current database.
+ The name (optionally schema-qualified) of a specific table to
+ vacuum. Defaults to all tables in the current database.
The entries in this Reference Manual are
- meant to provide in reasonable length an authorative, complete, and
- formal summary about the respective subjects. More information
+ meant to provide in reasonable length an authoritative, complete, and
+ formal summary about their respective subjects. More information
about the use of
PostgreSQL, in
narrative, tutorial, or example form, may be found in other parts
of the
PostgreSQL documentation set.