0

我正在尝试使用以下查询将列大小从 100 更改为 150 varchar 数据类型:

alter table data_warehouse.tbl_abc
alter column first_nm varchar(150) null;

收到以下错误:

SQL 错误 [42601]:错误:“varchar”位置或附近的语法错误:77

4

2 回答 2

1

语法有点不同,所以试试这个:

ALTER TABLE data_warehouse.tbl_abc
    ALTER COLUMN first_nm type varchar(120);
于 2020-11-06T08:36:48.073 回答
0

您的语法错误是您错过了一个TYPE关键字:

ALTER TABLE data_warehouse.tbl_abc
ALTER COLUMN first_nm TYPE varchar(150);

如果您有NOT NULL要删除的约束,请ALTER COLUMN在同一ALTER TABLE语句中添加一个新约束:

ALTER TABLE data_warehouse.tbl_abc
ALTER COLUMN first_nm TYPE varchar(150),
ALTER COLUMN first_nm DROP NOT NULL;

供参考看这里:https ://www.postgresql.org/docs/current/sql-altertable.html

编辑:如评论中所示,如果您有一个涉及同一列的视图,请将其删除并在事务下重新创建它:

BEGIN TRANSACTION;
DROP VIEW [...];
ALTER TABLE [...];
CREATE VIEW [...];
COMMIT;

请注意,要更改表,您必须在其上获取排他锁,因此在整个过程中,对同一张表和表视图的所有查询都被锁定,即使它们没有从更改的表中读取列(因为整个表都被锁定了)——在生产环境中谨慎使用

于 2020-11-06T08:51:25.977 回答