导入PostgreSQL数据库时遇报错:bigint类型输入语法无效
解决HeidiSQL恢复PostgreSQL时的"invalid input syntax for type bigint"错误
问题根源
你的建表语句里,id字段的默认值写法存在错误:把nextval('access_log_id_seq'::regclass)用单引号括起来了。PostgreSQL会将带引号的内容识别为字符串常量,但id是BIGINT类型,插入数据时系统尝试把字符串转换为bigint,就会触发类型转换错误。
解决方案
修正建表语句
将id字段的默认值去掉单引号,改成PostgreSQL支持的函数调用写法:CREATE TABLE IF NOT EXISTS "access_log" ( "id" BIGINT NOT NULL DEFAULT nextval('access_log_id_seq'::regclass), "user_id" BIGINT NOT NULL, "platform" SMALLINT NOT NULL, "created_at" TIMESTAMP NULL DEFAULT NULL, "updated_at" TIMESTAMP NULL DEFAULT NULL, "device_id" VARCHAR(255) NULL DEFAULT NULL, "location" VARCHAR(255) NULL DEFAULT NULL, "ip" VARCHAR(255) NULL DEFAULT NULL, PRIMARY KEY ("id"), CONSTRAINT "access_log_user_id_foreign" FOREIGN KEY ("user_id") REFERENCES "public"."users" ("id") ON UPDATE NO ACTION ON DELETE NO ACTION );检查备份数据
若修正建表语句后仍报错,打开备份文件检查以下字段的取值:id:确保是合法数字,或留空让序列自动生成user_id:必须是数字,且匹配users表中id的类型,不能为NULLplatform:必须是合法小整数,不能为NULL或字符串
优化备份方式
HeidiSQL对PostgreSQL的语法兼容偶尔会出问题,建议使用PostgreSQL原生的pg_dump工具导出备份,避免语法解析类错误。
补充说明
PostgreSQL中,字段默认值如果是函数调用(比如序列生成函数nextval),直接写函数即可,不需要加单引号。加单引号会将函数调用解析成普通字符串,导致类型不匹配。
内容的提问来源于stack exchange,提问作者Kapil Dev Singh
相关产品推荐
相关产品推荐

