PostgreSQL建表报错:DEFAULT应为varchar类型但'0'为int类型如何解决
问题判断
你的判断完全正确,报错的核心原因就是字段类型和默认值的类型不匹配。
当前使用的是强类型校验的关系型数据库(从语句里的SERIAL关键字判断大概率是PostgreSQL),要求字段默认值的类型必须和字段声明的类型严格匹配:lang字段声明为varchar(5)字符串类型,但是语句里给的默认值0是整数类型,触发了类型校验失败的报错。
修复方案
- 首先修正建表语句里的对应字段定义,把
lang varchar(5) DEFAULT 0 NOT NULL修改为lang varchar(5) DEFAULT '0' NOT NULL即可。
注意:SQL标准里字符串常量用单引号包裹,不要用双引号,多数数据库中双引号是用来标识表名、字段名等系统标识符的,用双引号包裹
"0"会被识别为字段名而非字符串值,反而会触发新的报错。
- 找到安装程序内置的对应SQL脚本文件,替换上面的错误语句后重新运行安装程序即可。如果安装流程已经执行到一半中断,也可以手动执行修正后的建表语句,再跳过该步骤继续后续安装流程。
- 建议同时排查安装脚本里所有建表语句的varchar/char/text等字符串类型字段的默认值,避免出现同类类型不匹配的问题。
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

