PostgreSQLエンタープライズ・コンソーシアム 技術部会 WG#2

WG2活動報告書
DB移行開発見積り編

PostgreSQL Enterprise Consortium

目次
目次
1. 改訂履歴
2. ライセンス3. はじめに3.1. 本資料の目的
3.2. 本資料で記載する範囲
3.3. 本資料で扱う用語の定義
3.4. 本資料で扱うDBMSおよびツール
4. オブジェクト移行コストの算出
4.1. 移行作業の視点
4.2. 移行作業コストの概算
5. オブジェクト移行の共通要素
5.1. オブジェクトの命名ルール、予約語
5.1.1. オブジェクトの命名ルール
5.1.1.1. 移行ツールによる作業量の軽減
5.1.1.2. DBMSの相違による手作業の作業量の把握
5.1.2. 予約語
5.1.2.1. 移行ツールによる作業量の軽減
5.1.2.2. DBMSの相違による手作業の作業量の把握
5.2. データ型
5.2.1. 移行ツールによる作業量の軽減
5.2.1.1. 文字列型
5.2.1.2. 数値型
5.2.1.3. 日付時刻型
5.2.1.4. バイナリ型
5.2.2. DBMSの相違による手作業の作業量の把握
5.2.2.1. 文字列型
5.2.2.2. 数値型
5.2.2.3. 日付時刻型
5.2.2.4. バイナリ型
5.2.2.5. その他の型
6. スキーマオブジェクトの移行
6.1. テーブル
6.1.1. 移行対象の選定作業
6.1.2. 移行ツールによる作業量の軽減
6.1.2.1. 一時テーブル
6.1.2.2. パーティションテーブル
6.1.3. DBMSの相違による手作業の作業量の把握
6.1.3.1. 列定義
6.1.3.2. オプション
6.1.3.3. 一時テーブル
6.1.3.4. パーティションテーブル
6.2. 制約
6.2.1. 移行ツールによる作業量の軽減
6.2.2. DBMSの相違による手作業の作業量の把握
6.2.2.1. 検査制約
6.2.2.2. 外部キー制約のON UPDATE句
6.3. 索引(インデックス)
6.3.1. 移行対象の選定作業
6.3.2. 移行ツールによる作業量の軽減
6.3.2.1. 通常索引
6.3.2.2. 関数索引
6.3.3. DBMSの相違による手作業の作業量の把握
6.3.3.1. 通常索引
6.3.3.2. 関数－通常索引
6.4. ビュー
6.4.1. 移行対象の選定作業
Page 2 of 26

2
5
6
7
7
7
7
7
8
8
8
9
9
9
9
9
9
9
9
10
10
10
10
10
10
10
10
10
10
10
11
12
12
12
12
12
12
12
12
12
13
13
13
14
14
14
14
14
14
14
14
15
15
15
16
16
16

PostgreSQL Enterprise Consortium

6.4.2. 移行ツールによる作業量の軽減
6.4.2.1. WITH READ ONLY
6.4.2.2. 更新可能ビュー
6.4.3. DBMSの相違による手作業の作業量の把握
6.5. マテリアライズドビュー
6.5.1. 移行対象の選定作業
6.5.2. 移行ツールによる作業量の軽減
6.5.3. DBMSの相違による手作業の作業量の把握
6.6. トリガ
6.6.1. 移行対象の選定作業
6.6.2. 移行ツールによる作業量の削減
6.6.3. DBMSの相違による手作業の作業量
6.7. シーケンス
6.7.1. 移行対象の選定作業
6.7.2. 移行ツールによる作業量の軽減
6.7.3. DBMSの相違による手作業の作業量の把握
6.7.3.1. キャッシュの仕様
6.7.3.2. 諸元値
6.7.3.3. 呼び出し方式
6.7.3.4. 自動採番
6.8. シノニム
6.8.1. 移行対象の選定作業
6.8.2. 移行ツールによる作業量の削減
6.8.3. DBMSの相違による手作業の作業量
6.9. データベースリンク
6.9.1. 移行対象の選定作業
6.9.2. 移行ツールによる作業量の削減
6.9.3. DBMSの相違による手作業の作業量

16
16
16
16
17
17
17
17
18
18
18
18
19
19
19
19
19
19
19
19
20
20
20
20
20
20
21
21
23
23
23
23
23
23
23
23
23
23
24
24
24
24
24
24
24
24
24
24
25
25
25
25
26

7. 非スキーマオブジェクトの移行
7.1. スキーマ
7.1.1. 移行対象の選定作業
7.1.1.1. ユーザ名と同一名のスキーマについて
7.1.2. 移行ツールによる作業量の削減
7.1.3. DBMSの相違による手作業の作業量の把握
7.1.3.1. CREATE SCHEMA文について
7.2. ユーザ
7.2.1. 移行対象の選定作業
7.2.2. 移行ツールによる作業量の削減
7.2.3. DBMSの相違による手作業の作業量
7.2.3.1. ユーザ名以外の移行
7.3. ロール
7.3.1. 移行対象の選定作業
7.3.2. 移行ツールによる作業量の削減
7.3.3. DBMSの相違による手作業の作業量
7.4. 権限
7.4.1. 移行対象の選定作業
7.4.2. 移行ツールによる作業量の軽減
7.4.3. DBMSの相違による手作業の作業量の把握
7.5. テーブルスペース
7.5.1. 移行対象の選定作業
7.5.2. 移行ツールによる作業量の削減
7.5.3. DBMSの相違による手作業の作業量
8. 著者

Page 3 of 26

PostgreSQL Enterprise Consortium

Page 4 of 26

PostgreSQL Enterprise Consortium

1. 改訂履歴
版

1.0

改訂日

変更内容

2017/04/27 新規作成

Page 5 of 26

PostgreSQL Enterprise Consortium

2. ライセンス
本作品はCC-B Yライセンスによって許諾されています。 ライセンスの内容を知りたい方は こちら でご確認ください。 文書の内容、表記に関する誤り、ご要望、感想等につきましては、PG ECo n s のサイト を通じてお寄せいただきますようお願いいたします。

Eclip se は、Eclip se Fo u n datio n In c の米国、およびその他の国における商標もしくは登録商標です。
IB M およびDB 2 は、世界の多くの国で登録された In tern atio n al B u sin ess Mach in es Co rp o ratio n の商標です。
In tel 、インテルおよびXeo n は、米国およびその他の国における In tel Co rp o ratio n の商標です。
Java は、O racle Co rp o ratio n 及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
Lin u x は、Lin u s To rvalds 氏の日本およびその他の国における登録商標または商標です。
Red Hat およびSh ado w man lo go は、米国およびその他の国におけるRed Hat,In c. の商標または登録商標です。
Micro so ft 、W in do w s Server 、SQ L Server 、米国 Micro so ft Co rp o ratio n の米国及びその他の国における登録商標または商標です。
MySQ L は、O racle Co rp o ratio n 及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
O racle は、O racle Co rp o ratio n 及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。
Po stgreSQ L は、Po stgreSQ L Co mmu n ity Asso ciatio n o f Can ada のカナダにおける登録商標およびその他の国における商標です。
W in do w s は米国 Micro so ft Co rp o ratio n の米国およびその他の国における登録商標です。
TPC, TPC B en ch mark, TPC-B , TPC-C, TPC-E, tp mC, TPC-H, TPC-DS, Q p h H は米国Tran sactio n Pro cessin g Perfo rman ce Co u n cil の商標です。
その他、本資料に記載されている社名及び商品名はそれぞれ各社が 商標または登録商標として使用している場合があります 。

Page 6 of 26

PostgreSQL Enterprise Consortium

3. はじめに3.1. 本資料の目的
本資料は、異種DB MS から Po stgreSQ L へ移行する際の移行作業コストを把握をするための情報提供を目的としています。 今回は、「データベースオブジェクトの移行」
をターゲットに整理しています。

3.2. 本資料で記載する範囲
本資料では、移行元の異種DB MS として O racle Datab ase を想定し、「 O racle から Po stgreSQ L へのデータベースオブジェクト移行」の範囲で記載しています。 今回
は、作業コストを把握しやすいように、データベースオブジェクトから主要なものに限定し取り扱っています。
また、アーキテクチャ、SQ L 、組み込み関数などの相違については本資料では取り扱っていません。これらに関しては、それぞれ「スキーマ移行調査編」、「 SQ L 移行調査編」、「組み込み関数移行調査編」などを参照してください。

3.3. 本資料で扱う用語の定義
資料で記述する用語について以下に定義します。
表 3.1 用語定義
用語

N o.

意味

1

DB MS

データベース管理システムを指します。ここでは、Po stgreSQ L および異種DB MS の総称として利用します。

2

異種DB MSPo stgreSQ L 以外のデータベース管理システムを指します。

3

O racleデータベース管理システムのO racle Datab ase を指します。

3.4. 本資料で扱うDBMSおよびツール
本書では以下のDB MS 、ツールを前提にした調査結果を記載します。
表 3.2 本書で扱う DB MS

DBM S 名称
Po stgreSQ L

バージョ ン

9.6.0

O racle Datab ase 11gR2 11.2.0.2.0
表 3.3 本書で扱うツール
ツール名称

O ra2Pg

バージョ ン

17.6

ラ イ センス

入手元

概要

G NU G en eral Pu b lic Licen sev3

h ttp ://o ra2p g.daro ld.n et/

O racle のスキーマ、データをPo stgreSQ L に移行するツール

Page 7 of 26

PostgreSQL Enterprise Consortium

4. オブジェクト移行コストの算出
4.1. 移行作業の視点
データベースオブジェクト移行にあたり、異種DB MS とPo stgreSQ L の相違を理解する必要があります。 まずはオブジェクトの移行可否を把握し、移行に必要な作業量を測る視点と移行手段を整理します。

1. 移行対象の視点
O racle が持つオブジェクトをPo stgreSQ L に移行可能かを識別する視点
移行後も引き続き使用するかもあわせて判断（テーブル、インデックス、ビュー、シーケンス、シノニムなど）

2. 影響範囲の視点
Po stgreSQ L 移行がオブジェクトの定義(DDL)やアプリケーションへ影響する範囲の視点（オブジェクトの共通要素、個別要素の影響範囲）

3. 移行手段の視点
移行ツールがカバーする範囲の視点（カバーされない範囲は自作ツールの開発や手作業の検討）

4.2. 移行作業コストの概算
次章以降では、上記の視点に基づき、データベースオブジェクト移行の共通要素と個別要素についてまとめています。
移行元の異種DB MS で扱っているオブジェクトの棚卸しを行い、各視点における影響範囲に関わる要素がどの程度 あるのかを、オブジェクト定義文やDB MS のディクショ
ナリの検索、目視により調査します。
影響度合いは移行元DB MS により異なるので、影響する作業量から影響度(高/中/低)などのように分類します。 それから、オブジェクト単位（共通要素も含む）に影響本
数と影響度に仕訳して、概算工数を算出します。

Page 8 of 26

PostgreSQL Enterprise Consortium

5. オブジェクト移行の共通要素
データベースオブジェクト移行にあたり、オブジェクト全体に共通した要素への影響を把握する必要があります。

[対象範囲]
オブジェクトの命名ルール
予約語
データ型

Po stgreSQ L の命名ルールに従っていない場合や予約語と同じ名前のオブジェクトは修正が必要です。 また、データ型の種類や精度の相違があるため、アプリケーション（業務）影響を考慮した対応付けが必要です。

5.1. オブジェクトの命名ルール、予約語
O racle とPo stgreSQ L ではオブジェクトの命名ルール、予約語に違いがあります。
それぞれの仕様を確認し、そのまま使用できない場合は変更をする必要があります。

Po stgreSQ L の命名ルールに従わない場合や予約語を識別子として使用する場合は、識別子を二重引用符（ "）で囲む必要があります。また、アプリケーションのSQ L についても識別子を二重引用符で囲む必要があります。

5.1.1. オブジェクトの 命名ル ー ルPo stgreSQ L ではオブジェクトの命名ルールとして以下があります。
文字（ a ～z および発音区別符号付き文字と非Latin 文字)、アンダースコア（ _ ）で始め、2 文字目以降には文字、アンダースコア、数字（ 0 ～9 ）あるいはドル記号($)を使用することが可能
長さはNAMEDATALEN-1 バイト（ NAMEDATALEN は、src/in clu de/p g_co n fig_man u al.h に指定されている。デフォルトは64 ）デフォルト設定の場合、Po stgreSQ L の方が長い識別子を許容するため長さの制限は問題となりませんが、O racle でオブジェクトの名前にシャープ記号(#)がついている場
合は注意が必要です。

5.1.1.1. 移行ツールに よる作業量の軽減
O racle でオブジェクトの名前にシャープ記号を使用している場合、O ra2Pg で出力されるSQ L には二重引用符付きで出力されます。
O ra2Pg で出力された SQ L のまま定義した場合、該当オブジェクトを指定する時はSQ L 内で必ず二重引用符をつけて指定する必要があります。
5.1.1.2. DBM S の相違に よる手作業の作業量の把握
シャープ記号を使わないオブジェクト名に変更する場合の作業量は、シャープ記号を使用している箇所数に依存します。
また、オブジェクト名を変更する方法、二重引用符で囲む方法のどちらの対処を選択した場合でもアプリケーションのSQ L に修正が必要です。

5.1.2. 予約語
O racle では予約語ではありませんが、Po stgreSQ L では予約語である単語があります。
予約語と同じ名前のオブジェクトや変数を使用している場合は、名前を変更する必要があります。
以下に Po stgreSQ L では予約語となる単語の一例を記載します。

B INARY
CO LLATE
FREEZEO FFSETW INDO W
5.1.2.1. 移行ツールに よる作業量の軽減
O ra2Pg で出力されるSQ L には、Po stgreSQ L では定義できない名前でもそのまま出力されます。
そのため、出力された後のSQ L に対して名前の変更作業または二重引用符の付加を行う必要があります。 さらに、定義の修正以外にもアプリケーションの修正が必要となります。

5.1.2.2. DBM S の相違に よる手作業の作業量の把握

Page 9 of 26

PostgreSQL Enterprise Consortium
予約語をオブジェクトや変数の名前に使用している箇所数に依存します。

5.2. データ型
O racle から Po stgreSQ L へ移行する際、組み込みデータ型はPo stgreSQ L の適切なデータ型に マッピングをして置き換えを行う必要があります。
表 5.1 データ型の移行可否
型分類

移行可否

備考

文字列型

○

用途に合わせて ch ar(固定長)、varch ar(上限付き可変長)、text(可変長)に移行。

数値型○

NU MB ER 型、浮動小数点型について精度やスケールに合わせて適切な型を選択して移行。

日付時刻型

○

Po stgreSQ L のdate 型は時刻情報を保持しないため、timestamp 系のデータ型に移行。

バイナリ型

○

バイナリ系のデータ型はb ytea 型に移行。

その他のデータ型△

RO W ID 、XMLTyp e 等のPo stgreSQ L に移行先の型はあるが機能的には十分でないもの、Po stgreSQ L に対応するデータ型がないもの、ユーザ定義型などについては、代替案やPo stgreSQ L 上での実装を検討。

5.2.1. 移行ツ ー ル による作業量の 軽減
基本的なデータ型については、O ra2Pg により適切なPo stgreSQ L のデータ型への自動変換が可能です。 移行先の型をパラメータで制御したり、データ型毎に任意の変換先のデータ型を指定することも可能です。

5.2.1.1. 文字列型
O racle の各種文字列型から Po stgreSQ L の文字列型に置き換えます。 文字列型についてはch ar 、varch ar 、text から適切な型を自動選択して変換が可能です。
5.2.1.2. 数値型
O racle のNU MB ER 型や浮動小数点型から Po stgreSQ L の適切なデータ型に置き換えます。 Po stgreSQ L のn u meric 型は演算処理の負荷が高いため、O ra2Pg では
下記のように n u meric 型を極力選択しない方向で変換を行います。
整数は桁に合わせて smallin t, in teger, b igin t から適切な型を自動選択。
小数点ありの場合、精度とスケールに応じて real 、flo at に変換。
それ以外の場合はn u meric に変換。

5.2.1.3. 日付時刻型
O racle の日付時刻系のデータ型から適切なPo stgreSQ L のデータ型に置き換えます。 DATE 型はPo stgreSQ L にも同名の型が存在しますが、Po stgreSQ L では日付情報のみを保持するため、 基本的にはtimestamp 系のデータ型に変換します。
タイムゾーン情報の有無に合わせて、timestamp 系のデータ型(timestamp 、timestamp w ith time zo n e)に変換します。

5.2.1.4. バイ ナ リ型
O racle のRAW やB LO B 等のバイナリ系のデータ型は、Po stgreSQ L のb ytea 型に変換します。

5.2.2. DBMSの 相違による手作業の 作業量の 把握
データ型の変換後の仕様差異による注意点や、ツールでは自動変換できないケースへの対応について記載します。

5.2.2.1. 文字列型
Po stgreSQ L のtext 型の最大長は1G B であるため、それを超えるサイズのデータが存在する可能性がある場合は、ラージオブジェクトでの代替等を検討する必要があります。
文字列型に指定する長さは、O racle では文字数もしくはバイト数として扱うことが可能ですが、Po stgreSQ L は文字数固定となるため注意が必要です。

5.2.2.2. 数値型
FLO AT型はPo stgreSQ L にも存在していますが、O racle の方が最大精度が大きいため注意が必要です。
5.2.2.3. 日付時刻型
TIMESTAMP 系のデータ型の秒未満の精度情報は維持されません。精度指定なしの場合はPo stgreSQ L における精度は6 桁になるため、必要に応じて追記をします。また、O racle における最大精度は9 桁であるため注意が必要です。
5.2.2.4. バイ ナ リ型

Page 10 of 26

PostgreSQL Enterprise Consortium

Po stgreSQ L のb ytea 型の最大長は1G B であるため、それを超えるサイズのデータが存在する可能性がある場合は、ラージオブジェクトでの代替、ファイルパスのみ
での管理等を検討する必要があります。

5.2.2.5. その他の型
RO W ID やB FILE 、XMLTyp e 等はO ra2Pg で自動変換が可能ですが、移行先のデータ型で要件を満たせるかを確認する必要があります。
U RO W ID 型など、O ra2Pg で自動変換ができないデータ型についてはそのまま出力されるため、別途対応方針を検討する必要があります。
ユーザ定義のデータ型を使用している場合、個別に Po stgreSQ L 上での実装や代替方法の検討が必要です。
サンプルとして、O racle にて下記テーブルが定義されているとします。

CREATE TABLE DATA_TYPE (C1 ROWID,
C2 BFILE,
C3 XMLType,
C4 UROWID);
O ra2Pg を使用すると、デフォルトでは下記のように変換されます。

CREATE TABLE data_type (c1 oid,c2 bytea,
c3 xml,c4 UROWID -- 自動変換不可のためそのまま出力) ;また、移行先のデータ型は任意に指定することが可能です。
例えば、RO W ID 型をo id 型に変換することを避ける場合、設定ファイルのDATA_TYPE に下記のように設定することで、 in t 型に変換されます。

DATA_TYPEROWID:int

下記は本設定を行いサンプルのテーブルの変換した場合の出力です。

CREATE TABLE data_type (c1 int,c2 bytea,
c3 xml,c4 UROWID) ;Page 11 of 26

PostgreSQL Enterprise Consortium

6. スキーマオブジェクトの移行
スキーマオブジェクトは、ユーザによってスキーマ内に作成される論理構造です。 表や索引などのいくつかのオブジェクトはデータを保持します。 ビューやシノニムなどのその他のオブジェクトは定義のみで構成されます。

[対象範囲]テーブル
制約
索引(インデックス)
ビュー
マテリアライズドビュー
トリガ
シーケンス
シノニム
データベースリンク

6.1. テーブル
6.1.1. 移行対象の 選定作業
データベースの根幹をなすオブジェクトであるテーブルについては、テーブルの種別や構成する列の定義に対して移行可否を検討します。
表 6.1 テーブル種別による移行可否
型分類

移行可否

備考

一時テーブル△Po stgreSQ L にも存在するが、セッションごとに定義する必要がある。

パーティションテーブル○

同等の構文は存在しないが、機能の組み合わせによって代替可能。
表 6.2 列定義による移行可否

型分類

移行可否

備考

データ型

○

文字列、数値、日付時刻、バイナリ等、基本的なデータ型については移行可能。

DEFAU LT句△

DEFAU LT句はPo stgreSQ L でも定義可能。定義内でO racle 固有の関数やユーザ定義関数を使用している場
合、代替が可能かを検討。

6.1.2. 移行ツ ー ル による作業量の 軽減
基本的なテーブルの構文はO ra2Pg で変換が可能です。 Po stgreSQ L が対応していないオプションについては変換時に削除されます。

6.1.2.1. 一時テーブル
O ra2Pg ではデータベース上の定義から一時テーブルの変換をすることができません。 DDL 文を記載したファイルを入力とすることで、Po stgreSQ L 向けに変換することは可能です。

6.1.2.2. パーティショ ンテーブル
Po stgreSQ L にはPARTITIO N B Y構文は存在しないため、Po stgreSQ L のテーブルの継承機能、 CHECK制約、トリガ等を組み合わせてパーティションを実現しています。
O ra2Pg を使用する場合、方式によって自動変換の可否が異なります。
リスト、レンジパーティションの場合
親テーブル、子テーブル、子テーブルの分割キー列のインデックス、CHECK 制約、INSERTトリガ等の構成要素に変換されます。
ハッシュ、コンポジットパーティションの場合
O ra2Pg では対応していないため、単体のテーブルとして変換されます。

6.1.3. DBMSの 相違による手作業の 作業量の 把握
6.1.3.1. 列定義
O ra2Pg で移行した結果、列に関連する定義について、対応が必要なポイントを整理します。
O ra2Pg では変換できないデータ型やユーザ定義型などについて、移行方法の検討をします。
6.1.3.2. オプショ ン

Page 12 of 26

PostgreSQL Enterprise Consortium

O ra2Pg による変換時にオプション構文はほぼ削除されることになりますが、Po stgreSQ L に同じような機能を持つオプションが存在する場合、追記することを検討します。
表 6.3 テーブルオプション
オプショ ン名

説明

PostgreSQL での対応

ブロック内で更新用に確保する領域の割合を指定

FILLFACTO R により代用が可能です。FILLFACTO R では挿入で使用可能な領域の割合を指定するため、設定値
としては逆の意味合いを持ちます。また PCTFREE のデフォルト値は10 ですが、FILLFACTO R のデフォルト値は100 であるため、Po stgreSQ L のデフォルトでは更新用の領域は確保をしないことになります。

NO LO G G ING 一部処理でトランザクションロ

Po stgreSQ L にはU NLO G G ED TAB LE というトランザクションログを出力しないテーブルが存在します。ただし、トラン

PCTFREE

グの出力をスキップする

ザクションログが必要な状況に陥った場合、テーブルが壊れた状態になってしまうため、単純な代替としては使用できません。

6.1.3.3. 一時テーブル
Po stgreSQ L の一時テーブルはセッション終了時に削除されてしまうため、 アプリケーション等からセッションごとに都度定義をする必要があります。
O ra2Pg で構文を変換した場合はO N CO MMIT句が削除されてしまうため、 Po stgreSQ L のデフォルトである「 PRESERVE RO W S 」以外の挙動をさせる場合、 定義を追記する必要があります。
また、O racle のデフォルトの挙動は「 DELETE RO W S 」である点も注意が必要です。 Po stgreSQ L は自動コミットで動作するため、O racle に合わせて「 DELETE RO W S 」に 設定した場合は、明示的にトランザクションに入って処理をしないと、即座に データが削除されてしまいます。

6.1.3.4. パーティショ ンテーブル
ハッシュやコンポジット等のO ra2Pg が対応していない方式のパーティションの場合、 パーティションの振り分けに使用する関数を作り込む必要があります。
また、性能面で問題がないかについては、事前に検討をしておく必要があります。 Po stgreSQ L のパーティションでは、パーティション数の目安は100 くらいまでとされており、それ以上の場合オーバヘッドが懸念されるため、パーティションの単位を変更することも 検討する必要があります。

6.2. 制約
O racle の制約については、表制約、列制約ともに Po stgreSQ L でも基本的な構文はそのまま使用可能です。
表 6.4 制約の移行可否
種別

移行可否

主キー制約 (表、列)○

外部キー制約 (表、列)○一意性制約 (表、列)○NO T NU LL 制約 (列)○検査制約 (表、列)△

備考

関数や演算子を使用している場合、別途それらの移行が必要になる可能性がある。

制約の状態に関するオプションについては、一部使用できないものがあります。
表 6.5 制約のオプションの移行可否
オプショ ン名

説明

移行可否

備考

[NO T] DIFERRAB LE

トランザクション完了まで制約のチェックを遅延する○

遅延可能な制約には制限あり。

INITIALLY [IMMEDIATE | DIFERRED]

制約チェックのタイミングを指定する○[ENAB LE | DISAB LE]

制約の使用可否を指定する

×

Po stgreSQ L には機能が存在しない。

[VALIDATE | NO VALIDATE]

制約使用時に既存のデータに適用するかを指定する×

Po stgreSQ L には機能が存在しない。

また、外部キー制約の参照先のデータが削除された場合の挙動に関するO racle のオプションについては、 Po stgreSQ L でも使用可能です。
表 6.6 外部キー制約のオプションの移行可否
オプショ ン名
指定なし

説明

移行可否

参照先の行は削除不可○

O N DELETE CASCADE 参照先の行削除時に参照元の行も削除
O N DELETE SET NU LL○

参照先の行削除時に参照元の列に NU LL を格納○

Page 13 of 26

備考PostgreSQL Enterprise Consortium

6.2.1. 移行ツ ー ル による作業量の 軽減
基本的な構文に違いはありませんが、Po stgreSQ L では使用できないオプションについては 削除する必要があります。

O ra2Pg を使用して移行した場合、不要なオプションについては削除が可能です。 また、制約の定義については主に ALTER TAB LE 構文として出力されますが、 制約によってはCREATE TAB LE 文に含めるかALTER TAB LE 構文として外出しするかを 制御可能です。他に、制約の名称に関する制御を行うオプション等も存在します。

6.2.2. DBMSの 相違による手作業の 作業量の 把握
6.2.2.1. 検査制約
制約に関する差異ではありませんが、検査制約において O racle 固有の関数や演算子を使用している場合、 その関数の代替を検討する必要があります。

6.2.2.2. 外部キー制約の ON UPDATE 句
Po stgreSQ L では外部キー制約の参照先に対する更新(U PDATE)時の挙動を制御するオプション (O N U PDATE ～)が使用可能であるため、O racle でO N U PDATE 句
相当の機能を別の手段を用いて実現していた場合には、 制約の定義に置き換えることが可能です。

6.3. 索引(インデックス)
6.3.1. 移行対象の 選定作業
O racle の索引タイプに着目し、Po stgreSQ L への移行可否を検討します。
移行可能・・・移行対象。索引定義の対象数を把握します。
移行不可・・・移行対象外。事前に性能面での影響確認の必要があります。
表 6.7 索引タイプの種類による移行可否
索引タ イ プ

移行可否

通常索引

○

逆キー索引

×

ビットマップ×ドメイン×関数－通常索引○

関数－逆索引×関数－ビットマップ

×関数－ドメイン

×

クラスタ

×

索引構成表

×

パーティション索引○

6.3.2. 移行ツ ー ル による作業量の 軽減
索引定義（ DDL)をPo stgreSQ L 用の定義に変換する作業が必要です。
O ra2Pg で自動変換することで手作業量を軽減することが出来ます。

6.3.2.1. 通常索引
O ra2Pg での構文変換は、以下の範囲では100% の変換率です。
索引定義に物理要素のオプションが指定がある場合は、「ソート順」 ]以外は除去されます。
物理要素は移行元とは異なる物理配置の検討が必要です。

Page 14 of 26

PostgreSQL Enterprise Consortium
表 6.8 利用別の変換内容
用途

変換内容

主キー制約

構文変換

外部キー制約構文変換

ユニーク制約構文変換

インデックス

構文変換

6.3.2.2. 関数索引
O ra2Pg での構文変換は、ユーザ定義関数・演算式では100% の変換率です。
ユーザ定義関数と演算子の記述箇所は変換されません。
組み込み関数は、Po stgreSQ L 対応の異なる関数名に変換されます。
Po stgreSQ L にない組み込み関数は事前に用意が必要です。
表 6.9 関数の種類による変換内容
関数の種類

変換内容

ユーザ定義関数

構文変換

組み込み関数構文変換、Po stgreSQ L 用関数に変換

演算式

構文変換

6.3.3. DBMSの 相違による手作業の 作業量の 把握
DB MS の構造や仕様などの主要な相違点や対処方法を整理しました。
利用頻度の高いもの（★印の項目）に関して、手作業時の作業量を計る視点をを記述しています。

6.3.3.1. 通常索引
[1]索引の利用用途からの把握
表 6.10 索引の利用用途からの把握
用途

移行可否

外部キー制約○ユニーク制約(★）△

インデックス○

作業内容

指定するカラムがNo tNu ll 制約でない場合、データ構造やアプリケーションの影響範囲を検討します。

[2]索引の物理属性(使用頻度の高いもの)からの把握
表 6.11 索引の物理属性(使用頻度の高いもの)からの把握
オプショ ン名

移行可
否

説明

作業内容

PCTFREE(★)

同一ブロック内の未使用領域の割合△

FILLFACTO R という使用領域の割合で代替します

INITRANS

データ・ブロック内で保持する初期トランザクション
数×オプションが存在しないため、考慮不要です

TAB LESPACE

データの論理構造名称

×テーブルスペースの概念が異なります[3]デフォルト値で設定されているもの(DDL に記述がない）による把握
表 6.12 O racle 側のデフォルト値(DDL に記述がない）による把握

Oracle 構文

PostgreSQL 構文

オプショ ン名

説明

デフォルト 値

オプショ ン名

デフォルト 値

作業内容

SO RT

索引を昇順ソートする

ASC

ASC/DESCASC無し

PCTFREE

同一ブロック内の未使用領域の割合

10

FILLFACTO R

90

無し

INITRANS

データ・ブロック内で保持する初期トランザクション数

2

--

--

無し

Page 15 of 26

PostgreSQL Enterprise Consortium
表 6.13 Po stgreSQ L 側のデフォルト値（ DDL に記述が無い）による把握
オプショ ン名

説明

デフォルト 値

作業内容

CO LLATIO N

照合順序

指定した列、対象式の照合順序

列や式の照合順に起因します

ASC/DESC

索引を昇順ソートする

ASC

影響しませんNU LLS FIRST(★）

NU LL を非NU LL より前にソートする

DESC が指定された場合物理的な格納順で利用上の問題はありません

NU LLS LAST(★）

NU LL を非NU LL より後にソートする

DESC が指定されない場合

性能の影響確認を検討します

FILLFACTO R(★）

同一ブロック内の使用領域の割合

B -tree は90%性能の影響確認を検討します

恒久テーブル・・・ defau lt_tab lesp ace 一時テーブル・・・ temp _tab lesp aces

Po stgreSQ L のアーキテクチャ設計に起因します

TAB LESPACE_NAME テーブルスペース名

6.3.3.2. 関数－通常索引[1]関数の種類による把握
表 6.14 関数の種類による把握
関数の種類

作業内容

ユーザ定義関数なし

組み込み関数(★）

DB MS の仕様相違で関数が不変オブジェクトでない場合や関数が存在しない場合は、関数を作成する必要があります。O racle 互換関数
として、o rafce で多数の関数が提供されているので活用することを検討します。

演算式

なし

6.4. ビュー
使用される頻度が高いビューの移行について説明します。
ビューに指定された副問合せの移行作業については触れていませんので、別途考慮する必要があります。

O racle で利用可能なエディショニング・ビュー、オブジェクト・ビュー、XMLTyp e ビューについても触れませんので、利用している場合は別途考慮する必要があります。

6.4.1. 移行対象の 選定作業
O racle で使用頻度が高いと思われるビューの定義に対する、Po stgreSQ L 移行時の移行可否は以下のとおりです。
表 6.15 ビュー移行の可否
オプショ ン

移行可否

備考

W ITH CHECK O PTIO N○

そのまま利用可能。

W ITH READ O NLY

×移行不可。削除が必要。

(更新可能ビュー)△

移行可能だが手作業での修正が必要な場合あり。

6.4.2. 移行ツ ー ル による作業量の 軽減
上記項目に対する移行ツールの変換対応は以下のとおりです。

6.4.2.1. WITH READ ON LY
O ra2Pg を使用した場合、削除した状態でSQ L が出力されます。
もしビューに対して同等の設定を行いたい場合は手作業で対応する必要があります。

6.4.2.2. 更新可能ビ ュー
O ra2Pg では対処しません。
Po stgreSQ L でビューに対して更新を行いたい場合、手作業での対応が必要な場合があります。

6.4.3. DBMSの 相違による手作業の 作業量の 把握
上記項目で手作業が必要なものに対する作業内容は以下のとおりです。

Page 16 of 26

PostgreSQL Enterprise Consortium
表 6.16 書き換え作業内容
オプショ ン

作業内容

SQ L 実行ユーザに対して更新権限を制限することで実現します。
W ITH READ O NLYにする必要があるビューに対して INSERT権限、U PDATE 権限、DELETE 権限を取り消すREVO KE 文を

W ITH READ O NLY

実行し対処します。

(更新可能ビュー)

Po stgreSQ L 文書に記載された更新可能ビューの条件に合うビューについては更新に対応しています。更新可能ビューはPo stgreSQ L 9.3 から実装しています。
Po stgreSQ L 9.3 以前のバージョンや、Po stgreSQ L 文書に記載された条件を満たさないビューについては別途トリガやルールを作成して対処します。
更新可能かどうかは情報スキーマ（ in fo rmatio n _sch ema ）のview s を参照することで確認可能です。

6.5. マテリアライズドビュー
6.5.1. 移行対象の 選定作業
マテリアライズドビューの種類に着目し、Po stgreSQ L への移行可否を検討します。
移行可能 ・・・ 移行対象。対象数を把握する。
移行不可 ・・・ 移行対象外。影響確認の必要がある。
表 6.17 マテリアライズドビューの種類による移行可否
マテリアラ イ ズド ビ ューの種類

移行可否

読取専用

○

更新可能

×

書込み可能

×

6.5.2. 移行ツ ー ル による作業量の 軽減
マテリアライズドビュー定義(DDL)をPo stgreSQ L 用の定義に変換する作業が必要です。
O ra2Pg で自動変換することで手作業量を軽減することができます。

O ra2Pg での構文変換は、以下の範囲では100% の変換率です。
物理領域のオプションは除去されます。
リフレッシュのオプションは除去されます。(※Po stgreSQ L に存在しない)
SELECT句は変換されません。
以下の表では、マテリアライズドビューで想定される使用目的に応じて、移行の方針立ての参考にするために利用用途別にツールでの変換内容をまとめています。
表 6.18 利用用途の種類による変換内容
利用用途

変換内容

リモートデータのスナップショット

構文変換

集計や結合処理の結果の高速化

構文変換

6.5.3. DBMSの 相違による手作業の 作業量の 把握
DB MS の構造や使用などの主要な相違点や対処方法を整理しました。
リフレッシュの設定はPo stgreSQ L では手動で設定する必要があります。

REFRESH MATERIALIZED VIEW コマンドを定期的に実行する。
[2] デフォルト値で設定されているもの(DDL に記述がない)による把握

Page 17 of 26

PostgreSQL Enterprise Consortium
表 6.19 O racle 側のデフォルト値(DDL に記述がない）による把握

Oracle 構文

PostgreSQL 構文

オプショ ン名

説明

デフォルト 値

オプショ ン名

デフォルト 値

作業内容

PCTFREE

同一ブロック内の未使用領域の割合

10

FILLFACTO R

100

性能の影響確認を検討します

IMMEDIATE /DEFERRED

マテリアライズドビュー作成時にデータを投入する

IMMEDIATE

W ITH [NO ] DATAW ITH DATA

なし

リフレッシュ方法

リフレッシュ要求時のリフレッシュ方法の指定

FO RCE----

手動実行を検討します

リフレッシュタイミング

リフレッシュの実行タイミングの指定

O n deman d----

手動実行を検討します

リフレッシュ方法

クエリーリライトでのマテリアライズドビューの使用可否の指定

無効

--

--

手動実行を検討します

表 6.20 Po stgreSQ L 側のデフォルト値(DDL に記述がない)による把握
オプショ ン名

説明

デフォルト 値

作業内容

FILLFACTO R

同一ブロック内の使用領域

テーブルは100%

性能の影響確認を検討します

TAB LESPACE_NAME

テーブルスペース名

defau lt_tab lesp ace

Po stgreSQ L のアーキテクチャ設計に起因する

マテリアライズドビューのデータ投入タイミ
ング

W ITH [NO ] DATA

作成時に投入

影響しません6.6. トリガ
6.6.1. 移行対象の 選定作業
使用頻度が高いと思われる、DML に対するトリガはO racle 、Po stgreSQ L ともに定義が可能です。

CREATE 文やALTER 文などのDDL に対するトリガは、Po stgreSQ L 9.3 以降であればイベントトリガとして定義することが可能です。
O racle で定義が可能なログオン、ログオフに対するトリガはPo stgreSQ L では対応していません。
表 6.21 O racle のトリガへの対応

OracleB EFO RE/AFTER INSERT/U PDATE/DELETE

PostgreSQL
Po stgreSQ L にてトリガとして作成可能

B EFO RE/AFTER CREATE/ALTER/DRO P (CREATE についてはAFTER のみ) Po stgreSQ L ではイベントトリガとして作成可能
B EFO RE LO G O FF / AFTER LO G O N

作成不可

DML とDDL に対するトリガを整理し、移行する対象を選定します。

6.6.2. 移行ツ ー ル による作業量の 削減
O ra2Pg において、移行対象のオブジェクト種別に "TRIG G ER"を指定することで、DML に対するトリガを作成するCREATE TRIG G ER 文が出力されます。
また、O racle のCREATE TRIG G ER 文の中に書かれていた処理内容にもとづき、Po stgreSQ L のトリガに使用するためのファンクションを作成するCREATE FU NCTIO N 文も同時に出力されます。※※ O racle とPo stgreSQ L とでは、O racle がCREATE TRIG G ER 文の中にトリガ処理内容を直接記述できるのに対して、Po stgreSQ L ではファンクショ
ンとして与える必要がある、という違いがあります。
しかし、O racle とPo stgreSQ L ではファンクションの定義に使用する言語や、組み込みファンクションに違いがあるため、そのままでは動作しない場合があります。
作成されたファンクションについては、内容を確認をする必要があります。

6.6.3. DBMSの 相違による手作業の 作業量
O racle ではCREATE TRIG G ER 文の中にトリガ処理内容を直接記述できるのに対して、Po stgreSQ L ではファンクションとして与える必要があります。
しかし、前述の通りPo stgreSQ L とO racle とでは、ファンクションに使用する言語や、組み込みファンクションに違いがあります。
そのため、各ファンクションの中身の確認や、処理が異なる場合の修正が手作業として必要になります。

Page 18 of 26

PostgreSQL Enterprise Consortium

6.7. シーケンス
6.7.1. 移行対象の 選定作業
シーケンス（順序）についてはO racle とPo stgreSQ L で大幅な機能差異はなく、比較的単純に移行が可能です。 O racle のシーケンスの定義構文で指定可能なオプションについて、Po stgreSQ L への移行可否を整理します。
表 6.22 シーケンスのオプションの移行可否
オプショ ン名

説明

移行可否

備考

INCREMENT B Y

シーケンスの増分値を指定○

START W ITH

シーケンスの初期値を指定○

MAXVALU E | NO MAXVALU E

シーケンスの最大値を指定○

MINVALU E | NO MINVALU E

シーケンスの最小値を指定○

CYCLE | NO CYCLE

シーケンスの循環可否を指定○

CACHE | NO CACHE

シーケンスのメモリへの事前割り当て数を指定○

デフォルト値が異なる。

O RDER | NO O RDER

シーケンスの採番順を維持するかどうかを指定

×Po stgreSQ L には存在しないが、主に O racle
RAC 構成で必要となるパラメータであるため影響なし。

6.7.2. 移行ツ ー ル による作業量の 軽減
O racle の構文で指定可能なオプションについては、ほぼ同等の内容をPo stgreSQ L でも指定可能ですが、一部書き換えを行う必要があります。 O ra2Pg を使用すること
で、下記のような差分については自動変換が可能です。

Po stgreSQ L ではNO CACHE を指定できません。キャッシュを無効にするにはCACHE を省略、もしくは1 に設定します。
Po stgreSQ L にはO RDER/NO O RDER オプションは存在しないため、指定されている場合はDDL から削除する必要があります。
NO で始まるキーワード(NO MAXVALU E 、NO MINVALU E 、NO CYCLE)は、Po stgreSQ L ではNO の後にスペースを入れる(NO MAXVALU E 、NO
MINVALU E 、NO CYCLE)必要があります。

6.7.3. DBMSの 相違による手作業の 作業量の 把握
O racle とPo stgreSQ L のシーケンスに関する主な仕様差異を説明します。 必要に応じて手作業での修正が必要になります。
6.7.3.1. キャッシュの仕様
各オプション構文を省略した場合のデフォルト値は、各DB MS で概ね同様の値が設定されますが、 CACHE についてはO racle が20 、Po stgreSQ L が1(キャッシュ無効)と異なっています。 また、O ra2Pg を使用した場合は設定値が正しく引き継がれますが、そもそもキャッシュの仕様に 差異があるため注意が必要です。

O racle ではインスタンス単位でキャッシュに指定された数のシーケンス値が確保され、 そこから各セッションが値を順次取得します。 Po stgreSQ L ではこのキャッシュの処理
をセッションごとに行うため、 キャッシュに指定された数のシーケンス値を各セッションが確保します。 そのため、シーケンス値に抜け番号が発生したり、採番された値が全体では時系列で並ばなくなることがあります。 これを避けるには、CACHE を1 に設定してキャッシュを無効にすることで、 各セッションからシーケンス値が1 つずつ確保されるようにします。

6.7.3.2. 諸元値
O racle のシーケンスの取りうる値の範囲は「 -(10^ 27-1) ～ 10^ 28-1 」、Po stgreSQ L では「 -(2^ 63-1) ～ 2^ 63-1 」であるため、 値の範囲はPo stgreSQ L の方が狭くなります。既に Po stgreSQ L の諸元範囲外の値を使用している場合は、 格納値の調整を行う必要が出てきます。
ただし、Po stgreSQ L の範囲でも現実的に値を使い切ることは考えにくく、 影響があるケースはほぼないと思われます。

6.7.3.3. 呼び出し 方式
シーケンスから値を取得したり現在の値を確認する際は、O racle の場合は疑似列にアクセスする形を取りますが、 Po stgreSQ L では関数呼び出しを行う必要があります。
アプリケーションから明示的に発行をしている場合、書き換える必要があります。

O racle の例
INSERT INTO TB L1 VALU ES (SEQ 1.NEXTVAL);SELECT SEQ 1.CU RRVAL FRO M DU AL;
Po stgreSQ L の例
INSERT INTO tb l1 VALU ES (n extval('seq1'));
SELECT cu rrval('seq1');
6.7.3.4. 自動採番

Page 19 of 26

PostgreSQL Enterprise Consortium

O racle では特定の列のデフォルト値にシーケンスを設定することができない(12c 以降は可能)ため、 トリガを使用して疑似的に自動採番を実装している場合があります。
Po stgreSQ L では列のデフォルト値に設定して採番することが可能であるため、 トリガを廃止して列の定義に DEFAU LT句を追加することを検討します。

6.8. シノニム
6.8.1. 移行対象の 選定作業
Po stgreSQ L では、シノニムをサポートしてませんが、 以下のような目的で使用している一部のシノニムについては、ビューなどで代替することが可能です。
O racle で使用していたシノニムの内、代替手段を使用して移行するシノニムを整理します。
表 6.23 代替手段により移行が可能なシノニム
目的

対象

移行方法

1

スキーマ名による修飾の省略

ファンクション, テーブル

検索パスを設定する。

2

テーブルに別名をつける

テーブル

O racle のシノニムと同じ名前でビューを作成する。ビューに対し権限を設定する。

6.8.2. 移行ツ ー ル による作業量の 削減
O ra2Pg において、移行対象のオブジェクト種別に "SYNO NYM"を指定することで上記の代替手段の内、2 のビューを使用した移行について実施するこが可能です。
O ra2Pg を使用することで、シノニムの対象となっているテーブルに対するビューが作成されます。
また、作成されたビューに対する所有者の設定と権限の設定が行われます。
O ra2Pg で作成されたビューの名前については、適宜修正する必要があります。

6.8.3. DBMSの 相違による手作業の 作業量
代替手段の内、1 の検索パスを設定する方法については、手作業により移行することが必要となります。

6.9. データベースリンク
6.9.1. 移行対象の 選定作業
Po stgreSQ L にはO racle のデータベースリンクに相当するオブジェクトは存在しませんが、代替案として 他のデータベースにアクセスする仕組である FDW 、 dblink の２種類が用意されています。
表 6.24 データベースリンク代替案
代替案

利用目的

概要

FDW

アプリケーションからの問い合わ
せリモートDB のテーブルを外部表と定義してテーブルと同様に扱います。

db lin k

運用時の一時的な問い合わせ

クエリに db lin k 関数（引数： DB 接続情報,SELECT文）を使用します。

FDW は標準的なSQ L で操作ができ、トランザクション管理や問い合わせの最適化などの機能面でdb lin k より優れています。
また、様々なデータベースやデータファイルとの連携も可能です。
そのために、O racle データベースリンクの代替としては、FDW の方が適しています。

[Oracle 構文 ]データベースリンクを通して、他のO racle データベースのテーブルにアクセスします。

-- データベースリンクの作成
CREATE DATABASE LINK dblink1
CONNECT TO user1 IDENTIFIED BY password1 USING‘remotedb'-- リモートDBの問い合わせ
SELECT * FROM remote_tbl@dblink1[FDW 構文 ]Page 20 of 26

PostgreSQL Enterprise Consortium

FDW モジュールをPo stgreSQ L に機能拡張することで様々な外部データにアクセスできます。
外部表を通して、通常の表と同様に SQ L で操作します。

-- fdwモジュールの拡張定義
CREATE EXTENSION postgres_fdw;-- 外部サーバの定義
CREATE SERVER dblink1
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS(host'remote_db',port'5432',dbname'remotedb');-- 外部サーバのユーザマップの定義
CREATE USER MAPPING FOR postgres
SERVER dblink1
OPTIONS(user'user1',password'password1');-- 外部表の定義
CREATE FOREIGN TABLE remote_tbl(
remote_id
integer,
remote_name
text)
SERVER postgres_server
OPTIONS(schema_name'postgres',table_name'remote_tbl');-- リモートDBの問い合わせ
SELECT * FROM remote_tbl;[dblink 構文 ]他のデータベースへの問い合わせを行うための関数群です。
db lin k は、DB 接続、切断、カーソルO PEN/CLO SE/FETCH 単位に制御する関数が存在しています。

-- リモートDBの接続
SELECT dblink_connect('dblink1',hostaddr=remote_db port=5432
dbname=remotedb user=user1 password=password1);-- リモートDBの問い合わせ
SELECT * FROM
dblink('dbname=dblink_name','select remote_id, remote_name from remote_tbl')
AS t1(remote_id integer, remote_name text);-- リモートDBの切断
SELECT dblink_disconnect('dblink1');

6.9.2. 移行ツ ー ル による作業量の 削減
データベースリンク定義（ DDL)から FDW 関連定義の雛形が生成されます。
表 6.25 FDW の雛形生成
構文

生成範囲

生成さ れ る DDL

CREATE SERVER

データベースリンク
名CREATE SERVER < データベースリンク名> FO REIG N DATA W RAPPER o racle_fdw O PTIO N(db server ' 接続子名');

CREATE U SER
MAPPING

ユーザ名

CREATE U SER MAPPING FO R < ユーザ名> SERVER < データベースリンク名> O PTIO N(u ser < 接続ユーザ>
p assw o rd 'secret');6.9.3. DBMSの 相違による手作業の 作業量
FDW を使うためには以下の作業が必要です。

Page 21 of 26

PostgreSQL Enterprise Consortium
表 6.26 FDW 使用のための作業
作業

作業内容

作業単位

fdw モジュールのインストール DB MS の種類に応じた fdw 専用モジュールを入手します。

DB MS 単位

Po stgreSQ L の拡張定義入手した fdw 専用モジュールを拡張定義として登録します。

DB MS 単位外部サーバの定義

連携先のDB 接続情報を定義します。

DB 単位

接続ユーザの定義

連携元と先のユーザマッピングを定義します。

DB 単位

接続テーブルの定義

連携先のテーブルを専用スキーマに外部表として定義します。

テーブル単位

SQ L の修正

データベースリンク名が指定されているSQ L を外部表の指定に修正します。

SQ L 単位※接続先DB がPo stgreSQ L の場合は、外部表を個別定義せずに、接続先DB のスキーマのテーブルを外部表としてインポートすることが可能です。

[IM PORT構文 ]IMPORT FOREIGN SCHEMA <接続先スキーマ名>
FROM SERVER <外部サーバ名> INTO <内部スキーマ名>;.

Page 22 of 26

PostgreSQL Enterprise Consortium

7. 非スキーマオブジェクトの移行
非スキーマ・オブジェクトは、スキーマに含まれないデータベースで扱うことのできる構成要素です。代表的なものとして、ユーザや権限があります。

[対象範囲]
スキーマ
ユーザ
ロール
権限
テーブルスペース7.1. スキーマ
7.1.1. 移行対象の 選定作業
スキーマについてはO racle とPo stgreSQ L で違いがあります。

O racle ではユーザとスキーマが1 対1 で対応していますが、Po stgreSQ L ではユーザとスキーマが対応づいていません。
また、CREATE SCHEMA 文の構文や意味も変わるため注意が必要です。

7.1.1.1. ユーザ名と 同一名のスキーマに つ いて
O racle ではユーザ名と同じ名前のスキーマが自動的に作成されます。
Po stgreSQ L ではユーザ名と同じスキーマが自動的に作成されることはありませんが、明示的に定義することは可能です。 また、スキーマ指定をしない場合に使用するス
キーマを変更することも可能です。

O racle と同様のスキーマを作成したい場合はこれらの作業を移行計画に含めておく必要があります。

7.1.2. 移行ツ ー ル による作業量の 削減
O ra2Pg でスキーマを出力するよう設定すれば、定義されていたスキーマのDDL が出力されます。 ただし、移行不要なスキーマが出力される場合がありますので、サンプルのスキーマなど不要なスキーマ定義文がないか確認し、必要に応じて削除を行ってください。

7.1.3. DBMSの 相違による手作業の 作業量の 把握
O ra2Pg でスキーマを出力するよう設定すれば、手作業での移行は不要です。
また、SQ L に明示的にスキーマ名を指定しない場合でも、search _p ath パラメータを変更していなければ、ユーザ名と同じ名前のスキーマを優先してオブジェクトを検索する
ので設定変更も不要です。

7.1.3.1. CREATE SCHEM A 文に つ いて
Po stgreSQ L にも同様の文がありますが、構文・意味合いが異なります。
O racle のCREATE SCHEMA 文と同様の処理を行いたい場合は、以下の手順で同等の処理を実施します。
1. スキーマが存在しない場合はCREATE SCHEMA 文でスキーマを作成します。
2. CREATE SCHEMA 文に指定していたテーブルやビューを作成する文を、該当するスキーマを指定して個別に実行します。

7.2. ユーザ
7.2.1. 移行対象の 選定作業
Po stgreSQ L では、O racle と同様にユーザを作成することが可能です。※※ Po stgreSQ L においては、ユーザはログイン権限を持つロールのことであり、O racle のユーザとは考え方が異なります。 ただし、O racle と同様に
CREATE U SER 文により、ユーザ(ログイン権限を持つロール)を作成することが可能です。

O racle で使用しているユーザを整理し、Po stgreSQ L でも引き続き使用するユーザを選定します。

7.2.2. 移行ツ ー ル による作業量の 削減

Page 23 of 26

PostgreSQL Enterprise Consortium

O ra2Pg において、移行対象のオブジェクト種別に "G RANT"を指定することで、O racle で使用していたユーザを作成する CREATE U SER 文が出力されます。
しかし、O ra2Pg ではパスワードが引き継がれないため、それらの移行を検討する必要があります。

7.2.3. DBMSの 相違による手作業の 作業量
7.2.3.1. ユーザ名以外の移行
ユーザの移行では、パスワード以外にもCREATE U SER のオプションに含まれない、権限の付与なども必要な作業となります。
ユーザの移行については、運用を検討し、権限なども移行する必要があります。
ユーザの移行時に検討・対応が必要となるポイントは以下の通りです。
表 7.1 ユーザ移行時のポイント
項目

Ora2Pg での変換対応

説明

パスワード有効期限出力されるCREATE U SER 文には設定されない

VALID U NTIL オプションで指定することが必要となる

権限

対象のオブジェクトに G RANTを指定した場合に G RANT文が作成される(権限のページを参照)

ユーザの作成後に権限の設定が必要となる

テーブルスペース出力されるCREATE U SER 文には設定されない

defau lt_tab lesp aces パラメータや temp _tab lesp aces パラメータの設定が必要となる

7.3. ロール
7.3.1. 移行対象の 選定作業
O racle で使用しているロールを整理し、Po stgreSQ L でも引き続き使用するロールを選定します。

7.3.2. 移行ツ ー ル による作業量の 削減
O ra2Pg において、移行対象のオブジェクト種別に "G RANT"を指定することでO racle で使用していたロールの移行が可能です。

7.3.3. DBMSの 相違による手作業の 作業量
O ra2Pg で出力されるSQ L の中にある CREATE RO LE 文だけでは権限が設定されませんので、同時に出力されるG RANT文を使用する必要があります。
権限については、権限のページを参照して下さい。

7.4. 権限
7.4.1. 移行対象の 選定作業
権限には大きく分けるとシステム権限とオブジェクト権限の2 種類があります。

Po stgreSQ L でも同様の権限設定は可能ですが、SELECT権限等の一部を除いてそのまま移行することはできません。
また、Po stgreSQ L でシステム権限を設定する場合、G RANT文ではなく CREATE RO LE 文やCREATE U SER 文を使用するものがあります。

7.4.2. 移行ツ ー ル による作業量の 軽減
O ra2Pg で出力する対象として G RANTを指定した場合、Po stgreSQ L でそのまま定義可能な権限についてはG RANT文を出力します。
しかし、SELECT権限等のごく一部であるため、必要な定義が出力されているかの確認を実施する必要があります。

7.4.3. DBMSの 相違による手作業の 作業量の 把握設定している権限の種類、設定量に応じて作業量を考慮する必要があります。
以下に、定義される頻度が高いと思われる権限の対応例を示します。

Page 24 of 26

PostgreSQL Enterprise Consortium
表 7.2 システム権限の移行例

Oracle の権限

PostgreSQL での定義例

CREATE PRO CEDU RE

作成先のスキーマに対して G RANT文で実行ユーザへのCREATE 権限を設定

EXECU TE ANY PRO CEDU RE

G RANT文で該当関数に対して実行ユーザへのEXECU TE 権限を設定

CREATE RO LE
CREATE U SER

CREATE RO LE 文またはCREATE U SER 文でユーザ作成時に CREATERO LE 権限を設
定

ALTER RO LE 文またはALTER U SER 文でCREATERO LE 権限を設定
CREATE SESSIO N

CREATE RO LE 文でユーザ作成時に LO G IN 権限を設定
CREATE U SER 文でユーザを作成(NO LO G IN 権限は設定しない)
ALTER RO LE 文またはALTER U SER 文でLO G IN 権限を設定
G RANT文で作成先のスキーマやテーブル空間に対して実行ユーザへのCREATE 権限を設定

CREATE TAB LE

表 7.3 オブジェクト権限の移行例

Oracle の権限
テーブルに対するALTER

PostgreSQL での定義例
テーブルの所有者のみ可能であるため、以下のように設定します。
1. CREATE RO LE 文でALTER 権限を持たせるためのロールを作
成
2. ALTER 文で該当テーブルの所有者を作成したロールに変更
3. ALTER 権限を持たせたいユーザをロールのメンバに設定

7.5. テーブルスペース
7.5.1. 移行対象の 選定作業
Po stgreSQ L とO racle とでは、データベースを構成するファイル構造が異なるため、 I/O 負荷の分散や容量の管理などの運用に差異が発生します。
それらの差異を踏まえて、移行後のテーブルスペースの構成を検討します。

7.5.2. 移行ツ ー ル による作業量の 削減
O ra2Pg において、移行対象のオブジェクト種別に "TAB LESPACE"を指定することでO racle で使用していたテーブルスペースを作成するCREATE TAB LESPACE 文と、 各
テーブルペースにテーブルや索引を割り当てるALTER TAB LE 文やALTER INDEX文が出力されます。
ただし、CREATE TAB LESPACE 文で指定されたディレクトリパスは、O racle にもとづいているため、修正する必要があります。

7.5.3. DBMSの 相違による手作業の 作業量
前述の通り Po stgreSQ L と O racle とでは、データベースを構成するファイル構造が異なります。
そのため、テーブルスペースを単純に移行しても、期待する性能とはならない場合があります。
以下のような観点で、運用を検討し、必要に応じてテーブルスペースの構成を手作業で変更します。
表 7.4 テーブルスペース移行時のポイント
観点

Oracle の特徴

PostgreSQL での対応

I/O 負荷の分

O racle では、1 つのテーブルを別々のディスクに格納された複数のテーブ
ルスペースに割り当てることにより、I/O 分散が可能です。

Po stgreSQ L では基本的に 1 つのテーブルは1 つのテーブルスペースに格

散
容量の追加

O racle では、個々のテーブルが使用できるディスク容量が不足する場

Po stgreSQ L では個々のテーブルに対してテーブルスペースを追加するこ合、後から追加されたディスクにテーブルスペースを確保し、そのテーブルス
ペースをテーブルに追加することが可能です。

とができません。追加したディスクに新たなテーブルスペースを作成し、テーブルが使用するテーブルスペースを変更する必要があります。そのため、初めから十分な容量を検討しておくことが重要です。

Page 25 of 26

納する必要があります。同様の負荷分散を行いたい場合は、パーティショ
ニングなどの検討を行います。

PostgreSQL Enterprise Consortium

8. 著者（企業・団体名順）
版
第1.0 版(2016 年度W G 2)

所属企業・ 団体名

部署名

氏名

NEC ソリューションイノベータ株式会社

サポートサービス事業部

黒澤 彰

NEC ソリューションイノベータ株式会社

サポートサービス事業部

近藤 太樹

日本電子計算株式会社

技術本部 技術サービス部

毛塚 賢一

日本電子計算株式会社

技術本部 技術サービス部

大久保 明彦日本電子計算株式会社

技術本部 技術サービス部

伊藤 渉

富士通株式会社

ミドルウェア事業本部

山本 明範

富士通株式会社

ミドルウェア事業本部

豊島 良美

富士通株式会社

ミドルウェア事業本部

伊與田 智也

三菱電機株式会社

情報技術総合研究所

田中 覚

Page 26 of 26