开发者社区> 问答> 正文

Postgresql修改字段使用using提示语法错误

springboot:2.4.5 druid-version: 1.2.5 dbType: postgresql,版本 11.x

字段column_name原本是varchar,需要将其修改为int4,执行的sql:

alter table table_name alter column column_name type int4 using column_name::int4;

会得到如下报错:

... Message : sql injection violation, dbType postgresql, , druid-version 1.2.5, syntax error: syntax error, error in :'int4 USING column_name::int4, pos 75, line 1, column 71, token USING : ... ...

这个该如何解决呀?

原提问者GitHub用户whiteChen233

展开
收起
山海行 2023-07-05 18:04:58 320 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    在 PostgreSQL 中,使用 ALTER TABLE 命令修改字段时,可以使用 USING 子句来指定新字段的值。USING 子句的语法格式如下:

    sql
    Copy
    ALTER TABLE table_name ALTER COLUMN column_name SET DATA TYPE new_data_type USING expression;
    其中,expression 表示将旧字段值转换为新字段值的表达式。例如,将 age 字段的数据类型从 int 修改为 text,并将所有的 age 值转换为字符串,可以使用以下 SQL 语句:

    sql
    Copy
    ALTER TABLE person ALTER COLUMN age SET DATA TYPE text USING age::text;
    如果在使用 USING 子句时出现语法错误,可能是由于以下原因之一:

    表达式语法错误。USING 子句中的表达式需要符合 PostgreSQL 的 SQL 语法规范,并且能够正确地将旧字段值转换为新字段值。可能是由于表达式语法错误或者转换逻辑错误导致语法错误。建议仔细检查表达式的正确性和规范性,并进行相应的调试和优化。

    数据类型不兼容。在使用 USING 子句时,需要确保新字段的数据类型和表达式的返回值类型兼容,否则会出现语法错误。例如,将 age 字段的数据类型从 int 修改为 date,并将所有的 age 值转换为日期类型,需要确保表达式的返回值类型为 date,否则会出现语法错误。

    2023-07-30 20:45:16
    赞同 展开评论 打赏
  • 先把filters=wall临时去掉吧

    原回答者GitHub用户wenshao

    2023-07-06 10:42:42
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
金融级 PostgreSQL监控及优化 立即下载
PostgreSQL在哈啰的实践-周飞 立即下载
PostgreSQL高并发数据库应用数据 立即下载

相关镜像