【问题标题】:Error in changing column length in Postgres在 Postgres 中更改列长度时出错
【发布时间】:2021-02-18 23:35:49
【问题描述】:

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

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

得到以下错误:

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

【问题讨论】:

    标签: sql postgresql alter-column


    【解决方案1】:

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

    ALTER TABLE data_warehouse.tbl_abc
        ALTER COLUMN first_nm type varchar(120);
    

    【讨论】:

    • 如果视图正在使用此列,是否可以这样做?
    • 否,因为它被视图引用。您有此错误:错误 SQL [0A000]:错误:无法更改视图或规则使用的列的类型
    【解决方案2】:

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

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

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

    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;
    

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

    【讨论】:

    • 如果视图正在使用此列,是否可以这样做?
    • 不...在这种情况下,您需要先删除并重新创建视图(对于简单视图)或更改物化视图(对于物化视图)。在事务下执行此操作以保持视图可用:BEGIN TRANSACTION; DROP VIEW [...]; ALTER TABLE [...]; CREATE VIEW [...]; COMMIT;。见expertphp.in/article/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 2019-09-06
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多