ALTER TABLE
功能描述
修改表,包括修改表的定义、重命名表、重命名表中指定的列、添加/更新多个列、将列存改为HStore表等。
注意事项
- 通过ALTER修改enable_hstore值可以将列存表变成HStore表,或者将HStore修改成列存表。但需要注意enable_delta为on时,无法设置enable_hstore为on。
- 对于部分ALTER操作(修改列类型,分区合并,添加NOT NULL约束,添加主键约束),HStore表需要先将数据MERGE到主表然后再执行原有的ALTER逻辑,这可能会带来额外的性能开销, 性能影响大小与delta表的数据量相关。
- 当需要增加列时, 建议不要与其它类型的ALTER(比如修改列类型等)组合使用,在一条ALTER里只有ADD COLUMN情况下,由于不需要做FULL MERGE, 性能会有很大提升。
- 不支持修改存储参数ORIENTATION。
修改表属性
使用语法:
1
|
ALTER TABLE [ IF EXISTS ] <table_name> SET ( {ENABLE_HSTORE = ON} [, ... ] ); |
将列存表修改成HStore表:
1 2 |
CREATE TABLE alter_test(a int, b int) WITH(ORIENTATION = COLUMN); ALTER TABLE alter_test SET (ENABLE_HSTORE = ON); |
当需要使用HStore表时,一定要同步修改如下参数的默认值,否则会导致HStore性能严重劣化,推荐的默认配置是
autovacuum_max_workers_hstore=3,autovacuum_max_workers=6,autovacuum=true。
增加列
使用语法:
1
|
ALTER TABLE [ IF EXISTS ] <table_name> ADD COLUMN <new_column> <data_type> [ DEFAULT <default_value>]; |
示例:
创建表alter_test2并对其增加列:
1 2 |
CREATE TABLE alter_test2(a int, b int) WITH(ORIENTATION = COLUMN,ENABLE_HSTORE = ON); ALTER TABLE alter_test ADD COLUMN c int; |
增加列时不建议在同一个SQL中与其它ALTER组合使用。
重命名
使用语法:
1
|
ALTER TABLE [ IF EXISTS ] <table_name> RENAME TO <new_table_name>; |
示例:
创建表alter_test3并对其重命名为alter_new:
1 2 |
CREATE TABLE alter_test3(a int, b int) WITH(ORIENTATION = COLUMN,ENABLE_HSTORE = ON); ALTER TABLE alter_test3 RENAME TO alter_new; |