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/を使用して開始しますが、結果のスキーマをやみくもに使用しないでください。Craig が提案したように、データ型を見てください。NUMBER から NUMERIC への変換は単純ですが、ディスク上のフットプリントがはるかに大きくなります。また、インデックスのサイズが大きくなり、アプリ全体の速度が低下します。結果のスキーマに NUMERIC 列を含めることはできません。ただし、アプリで厳密な精度が本当に必要であり、ルールではなく例外にする必要があります。

于 2012-08-03T13:14:55.787 に答える