Ticket #89 (closed defect: fixed)

Opened 14 years ago

Last modified 14 years ago

cyp转PG 遇到的问题,以及解决方案

Reported by: lisiliang Owned by:
Priority: major Milestone:
Component: 商家后台 Version: 6.0
Keywords: 数据库迁移 Cc:
Due Date: 14/03/2012

Description

[postgres@test740-10 ora2cyp]$ cat export.log |grep ERROR
psql:ENT_COMPANY_WEB.sql:142: ERROR: value too long for type character varying(720)
psql:ENT_NEWS_WEB.sql:19: ERROR: value too long for type character varying(500)
数据长度不对,有可能跟转为utf8 字符集,长度增加有关系,奇怪的是其他表不需要。

psql:ENT_QQ_CONTACT.sql:21: ERROR: bigint out of range
其中的qq 号明显有问题,修改字段类型,重新导入,建议开发对输入做限制。

psql:ENT_QUESTION.sql:1125: ERROR: value too long for type character varying(2000)
ENT_REQUEST_ERROR.sql Tue Mar 13 21:19:13 CST 2012
psql:ENT_REQUEST_ERROR.sql:43: ERROR: value too long for type character varying(4000)
psql:ENT_SYSLOG.sql:72: ERROR: value too long for type character varying(500)

数据长度不对,有可能跟转为utf8 字符集,长度增加有关系,奇怪的是其他表不需要。

psql:TMP_A.sql:1: ERROR: syntax error at or near "("
tmp_a 是临时表跟业务无关,直接删除。

Change History

comment:1 Changed 14 years ago by chenchongqi

  • Version set to 6.0

comment:2 Changed 14 years ago by chenchongqi

  • Keywords 数据库迁移 added

comment:3 Changed 14 years ago by lisiliang

1.oracle 的函数索引,需要检查,部分在pg 不支持

例如 (trunc(create_time)) ,trunc 函数需要处理。

2.字符编码问题 :

部分gbk了里的乱码,没有对应utf8编码,无法转入,需要人工干预。 ( 目前已经解决)

  1. pg 里没有rollback 语句,不会自动rollback ,需要应用里触发异常。

5.rownum -----> limit m,n

6.子查询需要定义别名 alias

  1. 表的连接方式 需要注意 : 外联接 需要采用 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:4 Changed 14 years ago by chenchongqi

  • Status changed from new to closed
  • Resolution set to fixed
Note: See TracTickets for help on using tickets.