ALTER TABLE
Modify the attributes of a table.
ALTER TABLE [ IF EXISTS ] name
ADD column_name data_type [ column_constraint [ ... ] ] |
ADD table_constraint
ALTER [ COLUMN ] column_name SET DEFAULT expression |
ALTER [ COLUMN ] column_name DROP DEFAULT |
ALTER [ COLUMN ] column_name DROP NOT NULL |
ALTER [ COLUMN ] varchar_column_name VARCHAR(new_length) |
DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] |
OWNER TO { new_owner | CURRENT_USER | SESSION_USER } |
RENAME column_name TO new_column_name |
RENAME TO new_name |
SET MAX_SIZE [=] 'size' |
SET MAX_SIZE DISABLE |
SET SCHEMA new_schema |
SET ROWSTORE_SIZE_LIMIT 'size' |
SET ROWSTORE_FULL_ACTION { { 'B' | 'BLOCK' } | { 'C' | 'CANCEL' } | { 'S' | 'SLOW' } }
- IF EXISTS
- Alter the table if it exists, but do not return an error message if it does not exist.
- ADD column_name
- Add a column to a table. You must specify the data type.
You cannot drop columns from tables.
ALTER TABLE DROP COLUMN
is not supported.Tables have a limit of 2,000 user-defined columns.
- ADD column_constraint
- Specify column constraints for added columns, such as
UNIQUE
,NULL
, andDEFAULT
; however, you cannot add a column with aNOT NULL
constraint. See CREATE TABLE for complete column constraint syntax.Note: When you add a column with aDEFAULT
constraint, the default value is applied only for new rows that are inserted after the column was added. Existing rows in the table will contain aNULL
value for that column. - ADD table_constraint
- Add a table constraint:
PRIMARY KEY
,FOREIGN KEY
, orUNIQUE
(see CREATE TABLE for the complete syntax).Note:PRIMARY KEY
,FOREIGN KEY
, andUNIQUE
constraints are not enforced. - SET DEFAULT expression
- Define a default value for the column, which applies only to new rows that are inserted or updated; existing rows do not change.
- DROP DEFAULT
- Drop the default value for the column. Make sure the expression is compatible with the data type of the column. This change applies only to new rows that are inserted or updated; existing rows do not change.
- DROP NOT NULL
- Drop the
NOT NULL
constraint for the column.NULL
values will be allowed in new rows. This command applies only to columns that were definedNOT NULL
. (SET NOT NULL
is not supported.) - varchar_column_name
- Specify an existing
VARCHAR
column in the table. The column must be aVARCHAR
column; you cannot alter column lengths for other data types. You cannot alter the length of a column that is referenced in a view. - VARCHAR(new_length)
- The new length of the
VARCHAR
column you want to modify. This number must be greater than the current length of the column. For example, you can change aVARCHAR(20)
column to aVARCHAR(50)
. - DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ]
- Drop a constraint on a table, such as a foreign key constraint. The
CASCADE
option automatically drops objects that depend on the dropped constraint. TheRESTRICT
option (the default) does not drop the constraint if dependent objects exist. - OWNER TO
- Change the owner of the table.
- RENAME TO
- Rename a column in the table or the name of the table itself.
- SET MAX_SIZE [=] 'size'
- Specify the maximum amount of space an individual table may use, where
'size'
is the number of bytes.'size'
must be a positive integer with the possible inclusion of units: MB, GB, or TB. If units are included, the command will be accepted with and without a space between the integer and unit. - SET MAX_SIZE DISABLE
- Disable the disk usage limit for the specified table.
- SET SCHEMA
- Change the schema that the table belongs to.
- SET ROWSTORE_SIZE_LIMIT 'size'
- Specify a row store size limit for the table, using a number and a unit in single
quotes. For example:
'1MB'
'10MB'
'50GB'
A value of
-1
means infinity (equivalent to no limit other than the size of the row store itself). A value of0
means that rows are immediately flushed for every insert (creating very small shards in the column store file system).Specified limits are converted into a number of files and rounded down. The default file size is 32MB. For example, a limit of
32GB
converts to a maximum of 1024 32MB files.The current limit for each table is logged in the sys.table view.
- SET ROWSTORE_FULL_ACTION
- Specify the action to take when the row store limit for the table is reached. For
more details, see Managing the Row Store.
'S'
('SLOW'
): Insert rows directly into the column store. This option will make sure the data continues to load but performance will not be optimal. This option is the default. When rows start being loaded into the column store instead of the row store, you will see a warning message.'B'
('BLOCK'
): Block the insert until a flush is possible, then resume.'C'
('CANCEL'
): Cancel the insert and return an error.
The current action for each table is logged in the sys.table view.
Examples
premdb=# alter table team set schema private;
ALTER TABLE
premdb=# alter table matchstats add column matchid uuid null;
ALTER TABLE
premdb=# alter table match alter column matchday set default '2017-10-21';
ALTER TABLE
premdb=# alter table match alter column matchday drop default;
ALTER TABLE
NOT NULL
constraint from a
column:premdb=# alter table newmatchstats alter column seasonid drop not null;
ALTER TABLE
UNIQUE
constraint to a
table:premdb=# alter table match add constraint uniquematch unique(matchid);
ALTER TABLE
FOREIGN KEY
constraint to a
table:premdb=# alter table city add constraint fk_city_country foreign key (countrycode) references country(code);
VARCHAR
column city
in the
team
table. The column was originally defined as
VARCHAR(20)
.
premdb=# alter table team alter column city varchar(30);
ALTER TABLE
premdb=# alter table match drop constraint match_seasonid_fkey;
ALTER TABLE
match
table:premdb=# alter table match set rowstore_size_limit '10GB';
ALTER TABLE
premdb=# alter table match set rowstore_full_action 'C';
ALTER TABLE
premdb=# select * from sys.table where name='match';
-[ RECORD 1 ]--------+------------------------------
table_id | 16515
database_id | 16498
name | match
schema_id | 2200
owner_id | 10
distribution | hash
sort_key | [NULL]
distribution_key | seasonid
cluster_keys |
partition_keys |
is_temp | f
definition | [NULL]
is_auto_analyze | t
auto_analyze_policy | default_policy
last_analyzed | 2020-06-01 17:44:35.669725-07
creation_time | 2020-06-01 11:40:25.059889-07
rowstore_bytes | 0
rowstore_row_count | 0
rowstore_disk_usage | 0
rowstore_size_limit | 10737418240
rowstore_full_action | C
premdb=# alter table match set max_size='1MB';
ALTER TABLE