Ticket #88 (new defect) — at Version 19
商城数据库从oracle转postgresql
| Reported by: | huangzhong | Owned by: | |
|---|---|---|---|
| Priority: | major | Milestone: | 2012年6.0版本 |
| Component: | 系统相关 | Version: | 6.0 |
| Keywords: | 数据库迁移;postgresql | Cc: | |
| Due Date: | 31/05/2012 |
Description (last modified by huangzhong) (diff)
一、目标
在商城应用架构不变的基础上把数据库从oracle转到pg
二、任务
1.修改应用代码使之能在pg数据库上正常运行(代码中使用到的oracle特有的功能要去掉)
2.商城所依赖的产品库数据的同步
3.产品库所依赖的商城数据的同步
4.存储过程、方法、定时任务等改造
三、计划
四、转pG问题
http://rdtrac.pc.com.cn/itm/ticket/89
openjpa like 模糊搜索的问题 的转义字符问题
http://bbs.pconline.cn/topic-2071.html
五、oracle语法和pg语法区别
http://rdtrac.pc.com.cn/itm/attachment/ticket/88/PG%20vs%20ORACLE.doc
修改代码的工作量
trunc 8
rownum 93
Alias 137
(+) 109 针对复杂sql 的out join 写法 转pg的示例 http://bbs.pconline.cn/topic-2093.html
sysdate 42
DECODE 61
nvl 65
Connect by 16
like 92
查询整数返回类型转换问题 http://rdtrac.pc.com.cn/itm/ticket/88#comment:18
总数为623
Change History
comment:10 Changed 14 years ago by lisiliang
1.oracle 的函数索引,需要检查,部分在pg 不支持
例如 (trunc(create_time)) ,trunc 函数需要处理。
2.字符编码问题 :
部分gbk了里的乱码,没有对应utf8编码,无法转入,需要人工干预。 ( 目前已经解决)
- pg 里没有rollback 语句,不会自动rollback ,需要应用里触发异常。
5.rownum -----> limit m,n
6.子查询需要定义别名 alias
- 表的连接方式 需要注意 : 外联接 需要采用 left out join 而不是 oracle 里的 a.id=b.id(+) 这种方式。
8.关于oracle 里树形目录 connect by , pg 没有该语法,可以考虑用递归的方式实现:
例如:
WITH RECURSIVE source (part_no) AS (
SELECT 2
UNION ALL
SELECT part.part_no
FROM source JOIN part ON (source.part_no = part.parent_part_no)
)
SELECT * FROM source;
comment:15 Changed 14 years ago by huangzhong
在对数据进行分页时,我们经常需要在sql语句中使用limit。
在msyql中,limit使用如下
select *from mytable limit a,b
a为起始值,从0开始,b为获取数据长度
在postgresql中,limit使用如下
select *from mytable limit a offset b
b为起始值,a为获取数据长度
comment:18 Changed 14 years ago by huangzhong
java.math.BigDecimal? count = (java.math.BigDecimal?)em.createNativeQuery("select count(*) from table").getSingleResult();
这是一个很简单的查询语句,返回一个整数。在oracle中,执行正常,但在pg中执行,报java.lang.ClassCastException?: java.lang.Long cannot be cast to java.math.BigDecimal?,原来pg中返回的是Long对象,需要改成
Long count = (Long)em.createNativeQuery("select count(*) from table").getSingleResult();
![(please configure the [header_logo] section in trac.ini)](http://www1.pconline.com.cn/global/2008/images/jss/m_logo091125.jpg)
