【问题标题】:Conversion of DDL Oracle to PostgresDDL Oracle 到 Postgres 的转换
【发布时间】:2012-08-01 05:30:33
【问题描述】:

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

【问题讨论】:

  • 一些快速的想法:您需要删除除 TABLESPACE 之外的所有表创建限定符,因为 Pg 不存在这些限定符。 (如果您解释了它们的用途以及哪些(如果有的话)对应用程序功能很重要,那将会有所帮助,即您需要一个替代方案)。 NUMBER 变为 NUMERIC 用于任意精度值,或特定更有效的类型,如 integer 等。您需要查看 NUMBERNUMERIC 之间的兼容性差异。 VARCHAR2 通常会变成带有约束的text,或者varchar(n)
  • 如果 DDL 如此庞大,为两个平台维护它将是一场噩梦。您是否考虑过借此机会将其转换为可以生成 Pg 和 Oracle 的 DDL 脚本的抽象格式?一些模式逆向工程工具可以帮助自动化该过程。
  • 是的,这将是一场噩梦,但我不是决定权威..我们是手工做的....我已经考虑了你的类型变化,....!非常感谢..!

标签: oracle postgresql ddl database-migration dbmigrate


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2023-01-18
    • 2018-04-24
    • 2013-01-27
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2017-12-29
    • 2011-01-17
    • 2023-03-11
    相关资源
    最近更新 更多