2

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

1 回答 1

1

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

于 2012-08-03T13:14:55.787 回答