このドキュメントは、Oracle® 11g/12c データベースから Cloud SQL for PostgreSQL バージョン 12 への移行を計画し、実施する際に必要な情報とガイダンスを提供するシリーズの一つです。このシリーズには、最初の設定のパートに加えて、次のパートが含まれています。
- Oracle から Cloud SQL for PostgreSQL への移行: 用語と機能
- Oracle から Cloud SQL for PostgreSQL への移行: データ型、ユーザー、テーブル(このドキュメント)
- Oracle から Cloud SQL for PostgreSQL への移行: クエリ、ストアド プロシージャ、関数、トリガー
- Oracle から Cloud SQL for PostgreSQL への移行: セキュリティ、オペレーション、モニタリング、ロギング
- Oracle Database のユーザーとスキーマを Cloud SQL for PostgreSQL に移行する
データ型
Cloud SQL for PostgreSQL には、Oracle が提供するデータ型と完全に同等または類似したデータ型がいくつか用意されています。次の表は、最も一般的な PostgreSQL のデータ型の一覧です。その下には、Oracle のプリミティブ データ型と対応する Cloud SQL for PostgreSQL のデータ型の比較を示しています(データ型がサポートされていない場合は、代替のデータ型を示しています)。
Cloud SQL for PostgreSQL 12 のプリミティブ データ型
| Cloud SQL for PostgreSQL のデータ型ファミリー | Cloud SQL for PostgreSQL のデータ型名 | データ型の仕様 | 
|---|---|---|
| 文字列 / 文字 | CHAR(n) | 正確に n文字を格納します。CHARACTER(n)の別名。 | 
| CHARACTER(n) | 正確に n文字を格納します。 | |
| VARCHAR(n) | n文字までの可変数の文字を格納します。CHARACTER
VARYING(n)の別名。 | |
| CHARACTER VARYING(n) | n文字までの可変数の文字を格納します。 | |
| TEXT | VARCHAR特定のバリアント。文字数の上限を指定する必要はありません。保存できる最長の文字数は 1 GB です(すべての文字列文字データ型で同じ)。 | |
| 数値 | SMALLINT | 最小値: -32768 | 最大値: 32767 | 
| INTEGER | 最小値: -2147483648 | 最大値: 2147483647 | |
| BIGINT | 最小値: -2^63 | 最大値: 2^63-1 | |
| REAL | 単精度浮動小数点数(4 バイト)。 | |
| DOUBLE PRECISION | 倍精度浮動小数点数(8 バイト)。 | |
| DECIMAL (p,s) | p桁と小数点以下s桁の任意の値を格納できます。 | |
| NUMERIC(p,s) | p桁と小数点以下s桁の任意の値を格納できます。 | |
| SMALLSERIAL | 自動増分式の整数。最小値: 1 | 最大値: 32767。 | |
| SERIAL | 自動増分式の整数。最小値: 1 | 最大値: 2147483647。 | |
| BIGSERIAL | 自動増分式の整数。最小値: 1 | 最大値: 2^63-1。 | |
| 金額 | MONEY | 固定小数点精度の金額。最小値 -92233720368547758.08 | 最大値 +92233720368547758.07。 | 
| 日付と時刻 | DATE | - 日付部分のみ(時刻部分はない)を含む値。 - サポートされる値の範囲: 紀元前 4713 年~西暦 5874897 年(精度は 1 日)。 | 
| TIMESTAMP (p) | - 日付と時刻の両方の部分を含む値。 - サポートされる値の範囲: 紀元前 4713 年~西暦 294276 年。 - 精度は小数第 p位まで(秒単位、指定されていない場合はマイクロ秒単位)。 | |
| TIMESTAMP (p) with time zone | - 日付、時刻、タイムゾーンを含む値。 - サポートされる値の範囲: 紀元前 4713 年~西暦 294276 年。 - 精度は小数第 p位まで(秒単位、指定されていない場合はマイクロ秒単位)。 | |
| TIME (p) | - 時刻部分のみ(日付部分はない)を含む値。 - サポートされる値の範囲: 00:00:00~24:00:00。 - 精度は小数第 p位まで(秒単位、指定されていない場合はマイクロ秒単位)。 | |
| TIME (p) with time zone | - 時刻とタイムゾーン(日付部分はない)を含む値。 - サポートされる値の範囲: 00:00:00~24:00:00。 - 精度は小数第 p位まで(秒単位、指定されていない場合はマイクロ秒単位)。 | |
| INTERVAL (p) | - 期間 - サポートされる値の範囲: -178,000,000~178,000,000 年。 - 精度は小数第 p位まで(秒単位、指定されていない場合はマイクロ秒単位)。 | |
| JSON | JSON | テキスト JSON データ。 | 
| JSONB | バイナリ JSON データ。 | |
| XML | XML | XML データ。 | 
| ジオメトリ | GEOMETRY | 次のデータモデルをいつ使用するかを指定する列型。 | 
| POINT | (x,y)値。 | |
| LINE | (A, B, C)のタプル。Ax +
By + C = 0で、AとBの少なくとも片方は 0 ではない。または 次の形式の点 1 と点 2: 
 | |
| LSEG | 線分: ((x1,y1),(x2,y2))。 | |
| BOX | 四角形のボックス: ((x1,y1),(x2,y2))。 | |
| PATH | 一連の点: ((x1,y1),...)。 | |
| POLYGON | 実質的に閉路を形成する一連の点。 | |
| CIRCLE | (x,y),r)(中心点と半径) | |
| 論理 | BOOLEAN | - 値として true、false、null を取ります。 - yes、true、t、on、1などの値は true として使用できます。 | 
| ビット / バイナリデータ | BIT (n) | 固定長のビット列。 | 
| BYTEA | バイナリデータ / バイト配列。 | |
| ネットワーク アドレスの種類 | CIDER | IPv4 ネットワークと IPv6 ネットワーク。 | 
| INET | IPv4 ネットワーク、IPv6 ネットワーク、IPv4 ホスト、IPv6 ホスト。 | |
| MACADDR | MAC アドレス | |
| MACADDR8 | MAC アドレス(EUI-64 形式)。 | |
| その他 | PG_LSN | Cloud SQL for PostgreSQL のログシーケンス番号。 | 
| TSQUERY | テキスト検索クエリ。 | |
| TSVECTOR | テキスト検索文書。 | |
| TXID_SNAPSHOT | ユーザーレベルの取引 ID のスナップショット。 | |
| UUID | ユニバーサルな固有識別子。 | 
Oracle から Cloud SQL for PostgreSQL へのデータ型変換
| Oracle のデータ型ファミリー | Oracle のデータ型名 | Oracle のデータ型の仕様 | Cloud SQL for PostgreSQL と Oracle で同等か | Cloud SQL for PostgreSQL での対応 / 代替 | 
|---|---|---|---|---|
| 文字列 / 文字 | CHAR(n) | 最大サイズ: 2,000 バイト | ○ | CHAR(n) | 
| CHARACTER(n) | 最大サイズ: 2,000 バイト | ○ | CHARACTER(n) | |
| NCHAR(n) | 最大サイズ: 2,000 バイト | × | CHAR(n) | |
| VARCHAR(n) | 最大サイズ: 2,000 バイト | ○ | VARCHAR(n) | |
| NCHAR VARYING(n) | 可変長の UTF-8 文字列。最大サイズ: 4,000 バイト | × | CHARACTER VARYING(n) | |
| VARCHAR2(n)
11g | 最大サイズ: 4,000 バイト、PL/SQL での最大サイズ: 32KB | ○* | VARCHAR(n) | |
| VARCHAR2(n) | 最大サイズ: 32,767 バイト MAX_STRING_SIZE= EXTENDED | ○* | VARCHAR(n) | |
| NVARCHAR2(n) | 最大サイズ: 4,000 バイト | × | VARCHAR(n) | |
| LONG | 最大サイズ: 2GB | ○* | TEXT | |
| RAW(n) | 最大サイズ: 2,000 バイト | ○* | BYTEA | |
| LONG RAW | 最大サイズ: 2GB | ○* | BYTEA | |
| 数値 | NUMBER | 浮動小数点数 | ○* | NUMERIC(p,s) | 
| NUMBER(*) | 浮動小数点数 | ○* | DOUBLE PRECISION | |
| NUMERIC(p,s) | 精度の許容範囲: 1~38 | ○ | NUMERIC(p,s) | |
| FLOAT(p,s) | 浮動小数点数 | ○* | DOUBLE PRECISION | |
| DEC(p,s) | 固定小数点数 | ○ | DEC(p,s) | |
| DECIMAL(p,s) | 固定小数点数 | ○ | DECIMAL(p,s) | |
| INT | 38 桁の整数。 | ○ | INT | |
| INTEGER | 38 桁の整数。 | ○ | INTEGER | |
| SMALLINT | 38 桁の整数。 | ○ | SMALLINT | |
| REAL | 浮動小数点数 | ○* | DOUBLE PRECISION | |
| DOUBLE PRECISION | 浮動小数点数 | ○ | DOUBLE PRECISION | |
| 日付と時刻 | DATE | 日付と時刻のデータ(年、月、日、時、分、秒)を格納します。 | ○* | TIMESTAMP(0) | 
| TIMESTAMP(p) | 小数を含む日付と時刻 | ○ | TIMESTAMP(p) | |
| TIMESTAMP(p) WITH TIME ZONE | 小数とタイムゾーンを含む日付と時刻 | ○ | TIMESTAMP (p) WITH TIME ZONE | |
| INTERVAL YEAR(p) TO MONTH | 日付範囲 | ○* | INTERVAL YEAR TO MONTH | |
| INTERVAL DAY(p) TO SECOND(s) | 日付と時刻の間隔 | ○* | INTERVAL DAY TO SECOND(s) | |
| 論理 | BOOLEAN | TRUE、FALSE、NULLの値。データベース テーブル列に割り当てることはできません。 | ○ | BOOLEAN | 
| XML | XMLTYPE | XML データ。 | × | XML | 
| LOB | BFILE | バイナリ ファイルへのポインタ。最大サイズは 4 GB です。 | × | VARCHAR(255) | 
| CLOB | ファイルサイズが最大 4 GB バイトまでの文字ラージ オブジェクト | × | TEXT | |
| BLOB | 最大 4 GB までのバイナリラージ オブジェクト。 | × | BYTEA | |
| NCLOB | 最大ファイルサイズが 4 GB の可変長の Unicode 文字列。 | × | TEXT | |
| ROWID | ROWID | 物理行アドレス | × | CTID | 
| UROWID(n) | 論理行アドレスのユニバーサル行 ID。 | × | CTID | |
| 空間 | SDO_ GEOMETRY | 空間オブジェクトのジオメトリに関する説明 | ○ | Postgres には、 point、line、path、polygon、circleなど、さまざまなジオメトリ タイプがあります。 | 
| SDO_TOPO_ GEOMETRY | トポロジのジオメトリの説明 | ○ | 広く使用されている Postgres 拡張機能である PostGIS には、いくつかのトポロジタイプが用意されています。 | |
| SDO_GEORASTER | ラスター グリッドまたは画像オブジェクトは単一行に格納されます。 | ○ | 広く使用されている Postgres 拡張機能である PostGIS には、ラスター ファイルをデータベースに読み込むツールが用意されています。 | |
| メディアの種類 | ORDDicom | Digital Imaging and Communications in Medicine(DICOM)ファイル形式のデータの保管と管理をサポートします。 | ○(回避策あり) | Postgres には、大きなオブジェクトを格納するためのバイナリ型 byteaがあります。 | 
| ORDDoc | メディアデータの保管と管理をサポートします。 | ○(回避策あり) | Postgres には、大きなオブジェクトを格納するためのバイナリ型 byteaがあります。 | |
| ORDImage | 画像データの保管と管理をサポートします。 | ○(回避策あり) | Postgres には、大きなオブジェクトを格納するためのバイナリ型 byteaがあります。 | |
| ORDVideo | 動画データの保管と管理をサポートします。 | 回避策 | Postgres には、大きなオブジェクトを格納するためのバイナリ型 byteaがあります。 | 
* Cloud SQL for PostgreSQL の対応するデータ型は Oracle とほぼ互換性がありますが、名前が異なります。
ユーザー定義型
Oracle ではユーザー定義型(UDT)を OBJECT TYPES と呼んでいます。オブジェクト型の管理には PL/SQL が使用されます。ユーザー定義型では、組み込みの Oracle データ型リストに含まれるデータ型を拡張してアプリケーション専用の複雑なデータ型を作成できます。
| Oracle のユーザー定義型 | Oracle の概要または実装 | Cloud SQL for PostgreSQL のサポート | Cloud SQL for PostgreSQL の対応ソリューションまたは代替ソリューション | 
|---|---|---|---|
| 抽象データ型(ADT) | CREATE TYPE ADT_DEMO AS OBJECT ( | 構文の一部が異なる | Cloud SQL for PostgreSQL の複合タイプは、属性名とデータ型のリストによって指定されます。 
 | 
| VARRAY 型 | CREATE TYPE VARRAY_DEMO AS VARRAY (5) OF VARCHAR2(25); | × | 回避策として、Cloud SQL for PostgreSQL では列を配列として定義できます。 
 | 
| ネストされたテーブル型 | CREATE TYPE NTT_DEMO AS OBJECT ( | × | 回避策として、Cloud SQL for PostgreSQL の複合タイプと配列の列定義を組み合わせて使用することで、Oracle のネストされたテーブル型と同様の機能を実現できます。 
 | 
| 不完全な型 | 不完全な型は、属性とメソッドのない型です。これは、他の型で参照できます。ただし、使用する前に型の定義を指定する必要があります。 
 | × | N/A | 
ユーザー
このセクションでは、ユーザーを作成して権限を割り当てる方法と、Oracle テーブルを Cloud SQL for PostgreSQL テーブルに変換する必要性について説明します。
ユーザーの作成と権限
Oracle データベース ユーザー アカウント(Oracle の「ユーザー」と「スキーマ」は同一)は、データベース セッションの認証と接続に使用できますが、承認アクセスは、特定のデータベースのオブジェクト / 権限に対してユーザーの個人レベルで設定されます。
通常、データベース ユーザーには次の 2 種類があります。
- 管理者: データベース インスタンス、ユーザー、リソースを管理します。
- ユーザー アカウント: アプリケーションなどの論理オペレーションを提供します。
管理者は、ユーザー アカウントとアプリケーション ユーザー アカウントにデータベース オブジェクトへのアクセス権限を付与します。Oracle データベース権限は、特定のオペレーション(セッションの作成や接続など)または特定のデータベース オブジェクト(特定のテーブルに対する SELECT や特定のストアド プロシージャの EXECUTE など)に対してユーザーに付与されます。
Oracle には、ユーザーとロールという考え方があります。ユーザーはデータベースでの認証に使用されるもので、ロールは権限をグループ化してまとめて付与するためのものです。
Cloud SQL for PostgreSQL では、ユーザーとロールは同義です。Cloud SQL for PostgreSQL のユーザーは、connect 権限を持つロールのことです。CREATE USER または CREATE ROLE ステートメントを使用して、データベース ユーザーを作成できます。Cloud SQL for PostgreSQL では、Oracle とは異なりスキーマとユーザーは別個に作成されます。スキーマは、オブジェクト(テーブル、データ型、関数など)の集合であり、ユーザーにより所有されます。
| Oracle の Create User | |
|---|---|
| CREATE USER user_name IDENTIFIED BY password; | |
| Cloud SQL for PostgreSQL の Create User | |
| CREATE USER user WITH PASSWORD 'password';または 
 | 
変換に関する考慮事項
- ユーザーはルートレベルで定義され、同じ Cloud SQL for PostgreSQL クラスタに含まれるすべてのデータベースで有効になります。これは Oracle 12c の「共通ユーザー」に似ています。
- Cloud SQL for PostgreSQL の CREATE USER構文は Oracle のものとは異なるため、そのままにして移行することはできません。Cloud SQL for PostgreSQL のCREATE USERは、LOGINオプションがデフォルトで有効になっていることを除き、CREATE ROLEのエイリアスです。
テーブル
Oracle のテーブルは多数の要素からなります。たとえば、列のデータ型、テーブル制約、インデックス、パーティション、Oracle 独自のテーブル機能などの要素です。Cloud SQL for PostgreSQL データベース テーブルに正常に移行するには、すべての Oracle テーブル要素を Cloud SQL for PostgreSQL テーブルに変換する必要があります。要素の中にはそのまま移行できるものや、わずかな変更ですむものがありますが、完全に変更しなければならない要素もあります。
移行の観点では、PL/SQL を Cloud SQL for PostgreSQL に変換するにはより多くの作業が必要になりますが、Oracle テーブルから Cloud SQL for PostgreSQL テーブルへの変換は、将来的にパフォーマンスとデータサイズに影響を及ぼす非常に重要な段階です。
以下は、Oracle と Cloud SQL for PostgreSQL のテーブルおよび関連機能の主な違いです。これらの違いについては、このシリーズの残りのパートで説明します。
- テーブル作成の構文
- テーブルとインデックスのメタデータ
- 制約のサポート
- データ型のサポートと制限事項
- インデックス
- パーティションとパーティション管理
- テーブルとインデックスのメンテナンス
- 一時テーブル
- ビュー
- 表示列と非表示列(Oracle 12c)
- テーブルと列の文字セット
次のステップ
- Cloud SQL for PostgreSQL ユーザー アカウントの詳細について確認する。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。