将DDL Oracle转换为Postgres

时间:2012-08-03 07:20:42

标签: oracle postgresql ddl database-migration dbmigrate

我在现有应用程序的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" ;

1 个答案:

答案 0 :(得分:1)

使用Ora2PG http://sourceforge.net/projects/ora2pg/开始,但不要盲目使用生成的架构。正如Craig建议的那样,看看数据类型。简单的NUMBER到NUMERIC转换会在磁盘上产生更大的占用空间。它还会导致更大的索引大小,从而降低整个应用程序的速度。您生成的架构不应包含任何NUMERIC列,除非您的应用程序确实需要abritrary percision,它应该是例外,而不是规则。