我在现有应用程序的Oracle中有一个非常庞大的DDL脚本, 它没有存储过程。 只是表格,序列和约束。
将它转换为Postgres的最佳方式是什么?
有些人说最好亲手做,有人说有免费的工具。 任何人都可以建议我这样做的最好方法吗?
如果是手工, 请告诉我必须做出哪些改变。
下面给出了Oracle DDL的示例, 请在转换为以下DDL的Postgres时通知所做的更改。
- DDL for Table ACTOR_ROLE_INFO
--------------------------------------------------------
CREATE TABLE "PAYTM_RELEASE1"."ACTOR_ROLE_INFO"
( "ACTOR_ROLE_ID" NUMBER,
"ACTOR_ID" NUMBER,
"ROLE_ID" NUMBER,
"STATUS" NUMBER,
"CREATED_BY" NUMBER,
"CREATED_ON" TIMESTAMP (6) WITH TIME ZONE,
"MODIFIED_BY" NUMBER,
"MODIFIED_ON" TIMESTAMP (6) WITH TIME ZONE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;
--------------------------------------------------------
-- DDL for Table ACTOR_TYPES
--------------------------------------------------------
CREATE TABLE "PAYTM_RELEASE1"."ACTOR_TYPES"
( "ACTOR_TYPE_ID" NUMBER,
"ACTOR_TYPE" VARCHAR2(100 BYTE),
"ACTOR_DESCRIPTION" VARCHAR2(100 BYTE),
"CREATED_BY" NUMBER,
"CREATED_DATE" TIMESTAMP (6) WITH TIME ZONE,
"MODIFIED_BY" NUMBER,
"MODIFIED_DATE" TIMESTAMP (6) WITH TIME ZONE
) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT)
TABLESPACE "USERS" ;
答案 0 :(得分:1)
使用Ora2PG http://sourceforge.net/projects/ora2pg/开始,但不要盲目使用生成的架构。正如Craig建议的那样,看看数据类型。简单的NUMBER到NUMERIC转换会在磁盘上产生更大的占用空间。它还会导致更大的索引大小,从而降低整个应用程序的速度。您生成的架构不应包含任何NUMERIC列,除非您的应用程序确实需要abritrary percision,它应该是例外,而不是规则。