このドキュメントは、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 アーキテクチャ センターをご覧ください。