修改表

ALTER TABLE
增加列 修改缺省值
删除列 修改列数据类型
增加约束 重命名列
删除约束 重命名表

AO 表支持 以上所以操作
ORC 表仅支持 增加约束、删除约束、重命名表
Magma 表不支持上述任何操作

增加列:
create table products(
product_no integer,
name text,
price numeric(10,2) check(price > 0)
);

ALTER TABLE products
ADD COLUMN description text DEFAULT '123'
check(description <> '');
AO 表在添加新列是必须设置缺省值,缺省值必须满足给出的约束;

删除列:
ALTER TABLE products
DROP COLUMN description;

增加约束:
ALTER TABLE products
ADD CHECK(name <> '');
表示对 products 表中的 name 字段进行了表约束;

增加一个不能写成表约束的非空约束
ALTER TABLE products
ALTER COLUMN product_no
SET NOT NULL;

删除约束:
ALTER TABLE products
DROP CONSTRAINT 约束名称;

必须知道约束名称才可以删除约束;
可以通过\d 表名 进行查询
\d products

testdb=# \d products
Orc Table "public.products"
Column | Type | Modifiers
------------+---------------+-----------
product_no | integer | not null
name | text |
price | numeric(10,2) |
Check constraints:
"products_name_check" CHECK (name <> ''::text)
"products_price_check" CHECK (price > 0::numeric)
Table Bucket Number: 8
Distributed randomly

删除非空约束:
ALTER TABLE products
ALTER COLUMN product_no
DROP NOT NULL;
因为非空约束没有名字;

改变列的缺省值:
ALTER TABLE products
ALTER COLUMN price
SET DEFAULT 7.77;
注意:该操作不会影响表中的现存数据,只能改变未来 insert 操作插入的新数据;

移除缺省值
ALTER TABLE products
ALTER COLUMN price
DROP DEFAULT;

改变列的数据类型:
ALTER TABLE products
ALTER COLUMN price
TYPE numeric(11,2);
注意:在修改某列类型之前,最好检查一下之前设置过的一些约束,
因为他们可能并不适合新的数据类型,建议将这些约束删除后,再把合适的约束添加上去;

重命名列:
ALTER TABLE products
RENAME COLUMN product_no
TO product_number;

重命名表:
ALTER TABLE products
RENAME TO items;

评论
    test