在postgreSQL数据库上 SSH应用开发bug记录

前端之家收集整理的这篇文章主要介绍了在postgreSQL数据库上 SSH应用开发bug记录前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

前言 :
把之前开发好的项目从oracle数据库移植到postgresql

项目中用到的技术:struts2 spring2.5 hibernate3.2
生成ID的策略用的是SEQUENCE
是知道了 oracle 和Postgresql支持SEQUENCE才进行安全迁移的
数据库版本 oracle10g postgresql8.2.3

下面就说 迁移过程中遇到的问题:
数据库定义类型和结构不同,手动建了几张表
如:表名 ERP2_TEST 序列SEQ_ERP2_TEST
字段 ID integer not null
字段 NAME character varying(20)
等等.... 建好表以及序列,没有在Postgresql上测试表

可以看到这里 表名 字段 序列都是大写的

一切认为OK了 就开始跑程序

bug1:
org.postgresql.util.PsqlException: ERROR: relation " seq_erp2_test " does not exist


类似这样的错误 序列找不到

然后查看postgresql文档 和 网上前辈是否也处理过这样的问题

知道了一种 在Postgresql8.2版本以上 可以创建serial类型的字段
那么就开始重新键那张测试表

表名 字段 依旧大写,建好表后 Postgresql自动生成了想要的序列 如:ERP2_TEST_ID_seq

改相应程序中 指定序列生成器的地方

OK了吧 看似。。重启tomcat...

bug2:
org.postgresql.util.PsqlException: ERROR: relation " ERP2_TEST_ID_seq " does not exist


这就奇怪了呢 看了网上一朋友的 英文留言...说什么 改成 ERP2_TEST_id_seq就OK了

没办法 行不行 程序跑了 才知道
结果 依然~~

我索性 把序列名全部改成小写形式 erp2_test_id_seq...
先露出点得意的笑 好了 启动不报错误了....

再就是跑具体的模块的增删改查操作....

有一次被囧了...

bug3
org.hibernate.exception.sqlGrammarException: Could not execute JDBC batch update
.....
##具体我看到一行错误 说是 没找到表 erp2_test
#我不是定义了的吗?


试了好多次... 仔细发现是找不到表
我看到 Postgresql 定义表结果的语句是

CREATE TABLE "ERP_ROLE"
(
  "ID" integer NOT NULL DEFAULT nextval('"ERP_ROLE_ID_seq"'::regclass),"NAME" character varying(20) NOT NULL,CONSTRAINT "PK_ERP_ROLE" PRIMARY KEY ("ID")
) 
WITHOUT OIDS;
ALTER TABLE "ERP_ROLE" OWNER TO postgres;


我然后改成小写 测试
表定义 成为
CREATE TABLE erp_role
(
  "ID" integer NOT NULL DEFAULT nextval('"erp_role_id_seq"'::regclass),CONSTRAINT "PK_ERP_ROLE" PRIMARY KEY ("ID")
) 
WITHOUT OIDS;
ALTER TABLE erp_role OWNER TO postgres;


启动应用 报相应的找不到 id name 等
然后逐一 改成小写形式
CREATE TABLE erp_role
(
  id integer NOT NULL DEFAULT nextval('"erp_role_id_seq"'::regclass),name character varying(20) NOT NULL,CONSTRAINT "PK_ERP_ROLE" PRIMARY KEY (id)
) 
WITHOUT OIDS;
ALTER TABLE erp_role OWNER TO postgres;
然后就好了呢.... postgresql 真的好奇怪 还区分大小写... 这么搞人... 哎呀.. 啰啰嗦嗦 说了这些 ps://每天记录一点 离成功近一点

猜你在找的Postgre SQL相关文章