PGECons技術ドキュメントテンプレート Ver.3



Similar documents
KINGSOFT Office 2016 動 作 環 境 対 応 日 本 語 版 版 共 通 利 用 上 記 動 作 以 上 以 上 空 容 量 以 上 他 接 続 環 境 推 奨 必 要 2

HDC-EDI BaseのAny変換における閏年の取り扱いに関する重要なお知らせ

CSV_Backup_Guide

<4D F736F F D208DE3905F8D8291AC8B5A8CA48A948EAE89EF8ED0208BC696B18BA492CA8E64976C8F BD90AC E378C8E89FC92F994C5816A>

<4D F736F F D F93878CA797708F4390B3816A819A95CA8B4C976C8EAE91E682538B4C8DDA97E12E646F6378>

(Microsoft PowerPoint - Ver12\203o\201[\203W\203\207\203\223\203A\203b\203v\216\221\227\277.ppt)

一般競争入札について


R4財務対応障害一覧

<4D F736F F D2090C389AA8CA72D92F18F6F2D D F ED28CFC82AF91808DEC837D836A B E838B A815B816A2E646F6378>

<4D F736F F D2095CA8E A90DA91B18C9F93A289F1939A8F D8288B3816A5F E646F63>

為 が 行 われるおそれがある 場 合 に 都 道 府 県 公 安 委 員 会 がその 指 定 暴 力 団 等 を 特 定 抗 争 指 定 暴 力 団 等 として 指 定 し その 所 属 する 指 定 暴 力 団 員 が 警 戒 区 域 内 において 暴 力 団 の 事 務 所 を 新 たに 設

目 次 1.はじめに 1-1. はじめに 2. 操 作 2-1. 概 要 2-2. 操 作 方 法 ( 調 査 依 頼 の 確 認 ) 2-3. 操 作 方 法 ( 回 答 登 録 ) 2-4. 操 作 方 法 (ワークシート 出 力 ) 2-5. 操 作 方 法 (ワークシート 取 込 ) 3.

ファイルサーバー(NFS) 構築ガイド

TeleOffice 3.0 Lync 2 TO

目 次 1. 積 算 内 訳 書 に 関 する 留 意 事 項 1 ページ 2. 積 算 内 訳 書 のダウンロード 3 ページ 3. 積 算 内 訳 書 の 作 成 (Excel 2003の 場 合 ) 6 ページ 4. 積 算 内 訳 書 の 作 成 (Excel 2007の 場 合 ) 13

Microsoft Word - サンプル _データベースアクセス_.doc

購買ポータルサイトyOASIS簡易説明書 b

2 出 願 資 格 審 査 前 記 1の 出 願 資 格 (5) 又 は(6) により 出 願 を 希 望 する 者 には, 出 願 に 先 立 ち 出 願 資 格 審 査 を 行 いますので, 次 の 書 類 を 以 下 の 期 間 に 岡 山 大 学 大 学 院 自 然 科 学 研 究 科 等

XML形式の電子報告書作成に当たっての留意事項

4 参 加 資 格 要 件 本 提 案 への 参 加 予 定 者 は 以 下 の 条 件 を 全 て 満 たすこと 1 地 方 自 治 法 施 行 令 ( 昭 和 22 年 政 令 第 16 号 ) 第 167 条 の4 第 1 項 各 号 の 規 定 に 該 当 しない 者 であること 2 会 社

スライド 1

預 金 を 確 保 しつつ 資 金 調 達 手 段 も 確 保 する 収 益 性 を 示 す 指 標 として 営 業 利 益 率 を 採 用 し 営 業 利 益 率 の 目 安 となる 数 値 を 公 表 する 株 主 の 皆 様 への 還 元 については 持 続 的 な 成 長 による 配 当 可

PATENTBOY/Netバージョンアップ説明書(Ver.1.92)

Server と Lync Server の 使 用 が 含 まれます ユーザーは これらの 製 品 とともに 使 用 するのに 必 要 な Windows Server CAL と Exchange および/または Lync Server の 適 切 な CAL を 取 得 する 必 要 がありま

治 験 実 施 管 理 システム NMGCP 向 け Excel 形 式 プロトコール 作 成 手 順 書 V4.0.3 対 応 版 第 1 版 株 式 会 社 富 士 通 アドバンストエンジニアリング All Rights Reserved,Copyright 株 式 会 社 富 士 通 アドバン

あいち電子調達共同システム

第2回 制度設計専門会合 事務局提出資料

平成27年度大学改革推進等補助金(大学改革推進事業)交付申請書等作成・提出要領

01_07_01 データのインポート_エクスポート_1

奨学事業戦略部個人情報ファイル簿

TIPS - 棚 割 りを 開 始 するまで Liteを 起 動 し 企 業 情 報 の 追 加 を 行 い 棚 割 を 行 う 企 業 の 追 加 をして 下 さい 企 業 情 報 の 追 加 時 に エラーメッセージが 表 示 された 場 合 別 途 TIPS トラブルが 発 生 した 場 合

事前チェック提出用現況報告書作成ツール入力マニュアル(法人用)

<4D F736F F D F4390B3208A948C E7189BB8CE F F8C668DDA97702E646F63>

第316回取締役会議案

AGT10 ( Android(TM) 4.1) ファームウェア更新方法

CENTNET 導 入 の 手 引 き 変 更 履 歴 No. 変 更 日 変 更 番 号 変 更 枚 数 備 考 /07/ 版 発 行 - システムリプレースにより 全 面 刷 新 //07/ 版 発 行 3 誤 字 等 の 修 正 /

3. システム 要 件 IM- 社 内 便 Ver.7.2 は 以 下 の 製 品 上 で 動 作 します サーバ 要 件 Windows Server 2003 R2 Windows Server 2008 Windows Server 2008 R2 Red Hat Enterprise Lin

Transcription:

PostgreSQL エンタープライズ コンソーシアム 技 術 部 会 WG#2 アプリケーション 移 行 調 査 編 製 作 者 担 当 企 業 名 TIS 株 式 会 社 2013 PostgreSQL Enterprise Consortium

改 訂 履 歴 版 改 訂 日 変 更 内 容 1.0 2013/04/22 新 規 作 成 ライセンス 本 作 品 は CC-BY ライセンスによって 許 諾 されています ライセンスの 内 容 を 知 りたい 方 は http://creativecommons.org/licenses/by/2.1/jp/でご 確 認 ください 文 書 の 内 容 表 記 に 関 する 誤 り ご 要 望 感 想 等 につきましては PGECons のサイトを 通 じてお 寄 せいただきますよ うお 願 いいたします サイト URL https://www.pgecons.org/contact/ Java は Oracle Corporation 及 びその 子 会 社 関 連 会 社 の 米 国 及 びその 他 の 国 における 登 録 商 標 です 文 中 の 社 名 商 品 名 等 は 各 社 の 商 標 または 登 録 商 標 である 場 合 があります Oracle は Oracle Corporation 及 びその 子 会 社 関 連 会 社 の 米 国 及 びその 他 の 国 における 登 録 商 標 です 文 中 の 社 名 商 品 名 等 は 各 社 の 商 標 または 登 録 商 標 である 場 合 があります PostgreSQL は PostgreSQL Community Association of Canada のカナダにおける 登 録 商 標 およびその 他 の 国 における 商 標 です その 他 本 資 料 に 記 載 されている 社 名 及 び 商 品 名 はそれぞれ 各 社 が 商 標 または 登 録 商 標 として 使 用 している 場 合 があります 2/10 2013 PostgreSQL Enterprise Consortium

はじめに 本 資 料 の 目 的 本 資 料 は 異 種 DBMS から PostgreSQL へアプリケーションを 移 行 する 作 業 の 難 易 度 ボリュームを 事 前 に 判 断 するた めの 参 考 資 料 として 利 用 することを 想 定 しています 本 資 料 で 記 載 する 範 囲 本 資 料 では 移 行 元 の 異 種 DBMS として Oracle Database を 想 定 し Oracle Database から PostgreSQL へアプリ ケーションを 移 行 する 代 表 的 なパターンについて 紹 介 します また JDBC を 用 いた Java アプリケーションを Oracle から PostgreSQL へ 移 行 する 際 に 考 慮 が 必 要 となる 箇 所 について 記 載 します 本 資 料 で 扱 う 用 語 の 定 義 資 料 で 記 述 する 用 語 について 以 下 に 定 義 します 表 1: 用 語 定 義 用 語 意 味 1 DBMS データベース 管 理 システムを 指 します ここでは PostgreSQL および 異 種 DBMS の 総 称 と して 利 用 します 2 異 種 DBMS PostgreSQL ではない データベース 管 理 システムを 指 します 本 資 料 では Oracle Database が 該 当 します 3 Oracle データベース 管 理 システムの Oracle Database を 指 します 本 資 料 で 扱 う DBMS およびツール 本 書 では 以 下 の DBMS を 前 提 にした 調 査 結 果 を 記 載 します 表 2: 本 書 で 扱 う DBMS DBMS 名 称 バージョン PostgreSQL 9.2.0 Oracle Database 11gR2 11.2.0.2.0 また 本 書 では 以 下 の JDBC ドライバを 前 提 にした 調 査 結 果 を 記 載 します 表 3: 本 書 で 扱 うJDBCドライバ PostgreSQL JDBC ドライバ JDBC ドライバのバージョン 9.2 Build 1002 (JDBC4) Oracle Database 11.2.0.3 3/10 2013 PostgreSQL Enterprise Consortium

目 次 1.Oracle アプリケーションからの 移 行 パターン...5 1.1.Java... 5 1.2.C... 5 1.3.PHP... 6 1.4.Perl... 6 1.5.Ruby... 6 1.6.シェルスクリプト...6 2.JDBC を 用 いた Java アプリケーションの 移 行...6 2.1.JDBC ドライバの 種 類...6 2.2.Oracle 拡 張 機 能...7 2.3.JDBC ドライバのデータベース 接 続 文 字 列 の 違 い...8 2.4.マッピングされるデータ 型 の 違 い...8 2.5.トランザクションの 取 扱 い...9 2.6.エラーメッセージ エラーコードの 違 い...9 4/10 2013 PostgreSQL Enterprise Consortium

1. Oracle アプリケーションからの 移 行 パターン Oracle のアプリケーションを PostgreSQL に 移 行 する 場 合 DBMS への 接 続 方 法 使 用 言 語 によって 移 行 方 法 が 異 なりま す 以 下 に 移 行 方 法 のパターンを 整 理 します 表 1: Oracle から PostgreSQL へのアプリケーション 移 行 パターン Oracle PostgreSQL 言 語 接 続 方 式 言 語 接 続 方 式 Java JDBC (Type4) Java JDBC (Type4) Java JDBC (Type2) Java JDBC (Type4) Java SQLJ - - C Oracle Call Interface (OCI) C libpq C Pro*C/C++ C ECPG PHP php-oci8 PHP Data Objects (PDO) PHP php-pgsql PHP Data Objects (PDO) Perl DBI DBD::Oracle Perl DBI DBD::Pg Ruby DBI ruby-oci8 Ruby DBI ruby-pg シェルスクリプト SQL*Plus シェルスクリプト psql シェルスクリプト SQL*Loader シェルスクリプト COPY 1.1. Java Java のアプリケーションから Oracle へ 接 続 する 方 式 として Java Database Connectivity(JDBC)を 利 用 する 方 式 と SQLJ を 利 用 する 方 式 があります JDBC は Java でリレーショナルデータベース(RDBMS)に 接 続 する 機 能 を 標 準 化 した API です JDBC の 標 準 仕 様 に 準 拠 した JDBC ドライバを 利 用 することで 異 なる RDBMS に 対 する 操 作 が 抽 象 化 され アプリケーションが RDBMS の 機 能 に 依 存 せずに 実 装 することができる 利 点 があります Oracle も PostgreSQL もそれぞれ JDBC ドライバが 提 供 されていますので JDBC の 標 準 機 能 で 実 装 された Java ア プリケーションであれば 基 本 的 に Oracle から PostgreSQL へは JDBC ドライバを 変 更 することで 移 行 ですますが 細 かな 注 意 点 については 2 で 記 載 します SQLJ は Java のプログラムに SQL 文 を 埋 め 込 む 方 法 ( 埋 め 込 み SQL)を 定 めた ISO 標 準 1 です API である JDBC と は 違 い Java 言 語 を 拡 張 したものですので SQLJ プログラムを 実 行 するには Java プログラムをコンパイルする 前 に SQLJ トランスレータと 呼 ばれるプリプロセッサで 変 換 する 必 要 があります なお PostgreSQL は SQLJ に 対 応 しておらず SQLJ を 前 提 に 書 かれたアプリケーションをそのまま PostgeSQL に 移 行 することはできません そのため JDBC の API を 利 用 する 形 にアプリケーションを 書 き 換 える 必 要 があります 1.2. C Cのアプリケーションから Oracle へ 接 続 する 方 法 として Oracle Call Interface(OCI)を 利 用 する 方 式 と Pro*C/C++ を 利 用 する 方 式 があります OCI はC 言 語 で Oracle に 接 続 する 機 能 を 提 供 する API です OCI ライブラリをリンクし ヘッダファイルをインクルード することで C 言 語 のアプリケーションから Oracle に 対 してデータベース 操 作 を 行 うことができます OCIと 同 様 にC 言 語 のアプリケーションから PostgreSQL に 接 続 する API として libpq がありますが JDBC と 違 って API の 仕 様 が 標 準 化 されていないため OCI を 使 ったアプリケーションを PostgreSQL に 移 行 する 場 合 は 同 様 の 機 能 を 実 現 する API に 置 き 換 える 作 業 が 必 要 になります Pro*C/C++は C 言 語 もしくは C++ 言 語 のプログラムに SQL 文 を 埋 め 込 む 方 式 で Pro*C 独 自 のソースコードをプリ プロセッサで C 言 語 のソースに 変 換 してから 実 行 可 能 なプログラムにコンパイルする 方 式 です PostgreSQL には 同 様 の 方 式 として ECPG 2 があるため ECPG の 仕 様 に 合 わせて 書 き 換 えることを 検 討 します 1 ISO/IEC 9075-10 2 http://www.postgresql.jp/document/9.2/html/ecpg.html 5/10 2013 PostgreSQL Enterprise Consortium

1.3. PHP PHP のアプリケーションから Oracle へ 接 続 する 方 法 として php-oci8 を 利 用 する 方 法 と PHP Data Objects (PDO) を 利 用 する 方 法 があります php-oci8 は PHP で Oracle に 接 続 する 機 能 を 提 供 するAPIで 内 部 では OCI を 利 用 して Oracle に 対 するデータ ベース 操 作 を 行 います php-oci8 と 同 様 に PHP のアプリケーションから PostgreSQL に 接 続 する API として php-pgsql があります phppgsql も 内 部 では libpq を 利 用 して PostgreSQL に 対 するデータベース 操 作 を 行 います php-oci8 と php-pgsql の API に 互 換 性 はないため php-oci8 を 使 ったアプリケーションを PostgreSQL に 移 行 する 場 合 は 同 様 の 機 能 を 実 現 する API に 置 き 換 える 作 業 が 必 要 になります PDO はデータベースの 違 いを 吸 収 し 共 通 の 関 数 でデータベースを 操 作 できるように 設 計 された 拡 張 モジュールです データベース 固 有 の 機 能 や SQL の 違 いまでを 完 全 に 吸 収 できるわけではありませんが PDO の 標 準 API で 実 装 された アプリケーションであれば 基 本 的 に Oracle から PostgreSQL へはドライバを 変 更 することで 移 行 できます 1.4. Perl Perl のアプリケーションからデータベースへ 接 続 する 場 合 DBI および DBD モジュールを 利 用 する 方 法 が 一 般 的 です DBI は Perl のためのデータベースアクセス 用 モジュールで データベースに 依 存 しない API を 提 供 します 一 方 DBD モ ジュールは DBI モジュールのためのデータベース 接 続 用 ドライバで DBI モジュールと 一 緒 に 機 能 することで データ ベースに 対 する 操 作 を 実 現 しています Oracle には DBD::Oracle PostgreSQL には DBD::Pg という DBD モジュールが 用 意 されていますので 基 本 的 に Oracle から PostgreSQL へは DBD モジュールを 変 更 することで 移 行 できます 1.5. Ruby Ruby のアプリケーションから Oracle へ 接 続 する 場 合 DBI および DBD モジュールを 利 用 する 方 法 が 一 般 的 です DBI は Ruby のためのデータベースアクセス 用 モジュールで データベースに 依 存 しない API を 提 供 します 一 方 DBD モジュールは DBI モジュールのためのデータベース 接 続 用 ドライバで DBI モジュールと 一 緒 に 機 能 することで データ ベースに 対 する 操 作 を 実 現 しています Oracle には ruby-oci8 PostgreSQL には ruby-pg という DBD モジュールが 用 意 されていますので 基 本 的 に Oracle から PostgreSQL へは DBD モジュールを 変 更 することで 移 行 できます 1.6. シェルスクリプト 簡 単 な SQL 実 行 を 行 うバッチアプリケーション 等 ではシェルスクリプトから Oracle のインタフェースユーティリティであ る SQL*Plus を 直 接 呼 び 出 す 形 で 実 装 されるケースがあります このケースでは シェルスクリプトで SQL*Plus を 呼 び 出 している 部 分 を PostgreSQL のインタフェースユーティリティである psql に 置 き 換 えることになります また データベースに 大 量 のデータを 投 入 するバッチアプリケーション 等 では シェルスクリプトから Oracle のユーティ リティである SQL*Loader を 直 接 呼 び 出 す 形 で 実 装 されるケースがあります このケースでは シェルスクリプトで SQL*Loader を 呼 び 出 している 部 分 を PostgreSQL の COPY コマンドに 置 き 換 え ることになります 2. JDBC を 用 いた Java アプリケーションの 移 行 ここでは JDBC を 用 いて Oracle に 接 続 している Java アプリケーションを PostgreSQL に 移 行 する 際 に 注 意 が 必 要 となる 点 について 記 載 します 2.1. JDBC ドライバの 種 類 Oracle は Oracle JDBC OCI Driver(Type2) と Oracle JDBC Thin Driver(Type4) の 2 種 類 の JDBC ドライバが 提 供 されています Oracle Call Interface(OCI)ドライバ(Type2) OCI ドライバは Oracle Call Interface(OCI)を 使 用 して Oracle データベースに 接 続 するタイプの JDBC ドライバです 実 行 時 に OCI のライブラリ(インストールディレクトリの lib 以 下 )が 必 要 で 実 質 的 に Oracle Client がインストールさ 6/10 2013 PostgreSQL Enterprise Consortium

れているマシンでしか 使 用 することができませんが 後 述 の Thin ドライバではサポートされない 機 能 がいくつか 利 用 でき る 高 機 能 なドライバです Thin ドライバ(Type4) Thin ドライバは Oracle のクライアントライブラリを 使 用 せず Net8 プロトコルを 用 いて 直 接 データベースに 接 続 する タイプの JDBC ドライバです クラスライブラリだけで 動 作 する 事 ができるので Oracle Client がインストールされていな いマシンでも 動 作 させる 事 が 可 能 ですが 前 述 の OCI ドライバでサポートされる 機 能 で 使 えないものがあります 一 方 で PostgreSQL で 提 供 される JDBC ドライバは Type4 のみですので Oracle で OCI ドライバを 利 用 している 場 合 でも PostgreSQL では Type4 のドライバを 利 用 することになります Oracle PostgreSQL の JDBC ドライバはともに JDBC4.0 の 標 準 機 能 をサポートしていますので JDBC の 標 準 機 能 を 使 って 実 装 されているアプリケーションであれば ほとんど 書 き 換 えることなく 移 行 することができます 2.2. Oracle 拡 張 機 能 Oracle の JDBC ドライバには JDBC 標 準 の 実 装 を 拡 張 する Java クラスとインタフェースが 用 意 されており JDBC 標 準 では 実 現 されていない Oracle 拡 張 機 能 を 使 用 することができますが PostgreSQL に 移 行 する 場 合 は Oracle 拡 張 機 能 が 使 えなくなります 具 体 的 には Oracle 独 自 の SQL データ 形 式 を 表 現 するクラス 群 の oracle.sql パッケージ ま たは java.sql のインタフェースに 対 する Oracle 拡 張 機 能 を 提 供 するクラス 群 の oracle.jdbc パッケージを 直 接 利 用 し ているアプリケーションは PostgreSQL では 利 用 できないため 書 き 換 えが 必 要 になります なお Oracle の JDBC ドライバによる Oracle 拡 張 機 能 としては 以 下 の 様 なものがあります 3 2.2.1. JDBC を 使 用 したデータベース 管 理 JDBC メソッド startup および shutdown(oracle.jdbc.oracleconnection インタフェース 内 )を 使 用 すると Oracle Database インスタンスの 起 動 と 停 止 を 実 行 できます 2.2.2. Oracle データ 型 のサポート 現 在 のバージョン(11g リリース 2)では 標 準 の JDBC で 定 義 されたデータ 型 の 利 用 が 推 奨 されていますが 標 準 の JDBC で 定 義 されない Oracle 独 自 のデータ 型 を 使 う 場 合 oracle.sql パッケージのクラスを 使 用 します 2.2.3. Oracle オブジェクトのサポート Oracle データベース 内 の 構 造 化 オブジェクトの 使 用 をサポートしています 2.2.4. スキーマの 命 名 サポート Oracle オブジェクト データ 型 クラスには 完 全 修 飾 スキーマ 名 の 受 入 れおよび 復 帰 を 行 う 機 能 があります 2.2.5. DML RETURNING データ 操 作 言 語 (DML) 文 に RETURNING 句 を 使 用 でき 2 つの SQL 文 を 1 文 に 結 合 できます 2.2.6. PL/SQL 索 引 付 き 表 へのアクセス JDBC アプリケーションで 索 引 付 き 表 パラメータを 使 用 して PL/SQL をコールできます 2.2.7. OCI 接 続 プーリング OCI ドライバでは 接 続 プーリングの 機 能 を 提 供 します この 機 能 によって アプリケーションは 少 数 の 物 理 接 続 を 使 用 して 複 数 の 論 理 接 続 を 保 持 できます PostgreSQL の JDBC ドライバには 接 続 プーリングの 機 能 はありませ んが Tomcat, JBoss といったアプリケーションサーバや pgpool-ii 4 といったミドルウェアで 接 続 プーリングの 機 能 3 Oracle Database JDBC 開 発 者 ガイド (http://docs.oracle.com/cd/e16338_01/java.112/b56281/oraint.htm#g1090378 http://docs.oracle.com/cd/e16338_01/java.112/b56281/instclnt.htm#chdcjedd)より 引 用 4 http://www.pgpool.net/docs/latest/pgpool-ja.html 7/10 2013 PostgreSQL Enterprise Consortium

は 実 現 可 能 です 2.2.8. クライアント 結 果 キャッシュ OCI ドライバでは SQL 問 合 せ 結 果 セットをクライアント 側 のメモリーへキャッシュすることが 可 能 となり 繰 返 しの 問 合 せでのレスポンス 時 間 を 改 善 することができます PostgreSQL の JDBC ドライバにはクライアント 結 果 キャッ シュの 機 能 はありませんが pgpool-ii のようなミドルウェアを 組 合 せることで 同 様 のクエリキャッシュ 機 能 が 実 現 可 能 です 2.2.9. 透 過 的 アプリケーション フェイルオーバー OCI ドライバでは 接 続 先 のデータベース インスタンスがダウンした 場 合 でも データベースに 自 動 的 に 再 接 続 で きる 機 能 が 提 供 されます PostgreSQL の JDBC ドライバにはアプリケーション フェイルオーバーの 機 能 はありませ んが pgpool-ii のようなミドルウェアを 組 合 せることで 同 様 のフェイルオーバー 機 能 が 実 現 可 能 です 2.2.10. OCI ネイティブ XA OCI ドライバにはネイティブ XA と 呼 ばれる 機 能 が 用 意 されています この 機 能 により ネイティブ API を 使 用 して XA コマンドを 送 信 できます 2.3. JDBC ドライバのデータベース 接 続 文 字 列 の 違 い JDBC の 標 準 機 能 を 使 って 実 装 されているアプリケーションであれば ほとんど 書 き 換 えることなく 移 行 することができ ますが JDBC ドライバのクラス 名 データベース 接 続 時 の URL 文 字 列 は DBMS に 依 存 しますので 変 更 が 必 要 になり ます Oracle データベースへの 接 続 方 法 Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn=drivermanager.getconnection("jdbc:oracle:oci8:@oracle.techscore","scott","tiger") PostgreSQL データベースへの 接 続 方 法 Class.forName("org.postgresql.Driver"); Connection conn = DriverManager.getConnection("jdbc:postgresql://localhost/test? user=fred&password=secret&ssl=true"); ただし このようなデータベース 接 続 用 の 情 報 はアプリケーションのソースコード 上 に 定 義 されることは 稀 で アプリケー ションが 利 用 するフレームワークやアプリケーションサーバの 設 定 ファイル 上 に 定 義 するケースが 一 般 的 ですので この 場 合 は 設 定 ファイルの 変 更 のみで 対 応 できます 2.4. マッピングされるデータ 型 の 違 い 2.4.1. Date 型 の 取 扱 い 日 付 を 表 す Date 型 は Oracle では 日 付 と 時 刻 を 両 方 保 有 します 一 方 で PostgreSQL では 日 付 のみを 保 有 し 時 刻 は 保 有 しません 5 この 違 いが JDBC がデータベースから Java オブジェクトへマッピングする 際 の 挙 動 の 違 いと なって 現 れることがあります Oracle では Date 型 で 保 有 している 時 刻 データを 失 わないため デフォルトで Date 型 は java.sql.timestamp にマッピングされます そのため データベースの Date 型 のデータを 取 り 出 した 後 Java アプリケーションで 時 刻 を 保 有 していることを 前 提 とした 実 装 がされている 場 合 があります 一 方 で PostgreSQL はデータベースの Date 型 を java.sql.date にマッピングし 時 刻 データを 持 たない 前 提 で すので Oracle で 使 用 していた 時 刻 を 保 有 している 前 提 のアプリケーションはそのまま PostgreSQL で 稼 動 しな いことがあり 得 ます 5 時 刻 のみを 表 現 する 場 合 は time 型 日 付 と 時 刻 を 両 方 表 現 する 場 合 は timestamp 型 を 使 います 8/10 2013 PostgreSQL Enterprise Consortium

2.5. トランザクションの 取 扱 い 2.5.1. DDL(Data Difinition Language)の 暗 黙 的 コミット Oracle では CREATE TABLE や DROP TABLE 等 の DDL 文 を 実 行 した 場 合 明 示 的 に COMMIT を 実 行 しなく てもトランザクションがコミットされます( 暗 黙 的 コミット)が PostgreSQL では 暗 黙 的 コミットが 行 われません そのため DDL 文 を 実 行 するアプリケーションがある 場 合 PostgreSQL で 実 行 するアプリケーションには 明 示 的 に COMMIT を 実 行 する 処 理 を 追 加 する 必 要 があります 2.5.2. エラーが 発 生 した 場 合 の 振 る 舞 い 複 数 の DML(Data Manipulation Language) 文 を 実 行 するトランザクションの 途 中 でエラーが 発 生 した 場 合 Oracle では COMMIT を 実 行 することができ 正 常 に 実 行 できた DML 文 の 処 理 を 確 定 することができます 一 方 PostgreSQL ではトランザクションの 途 中 でエラーが 発 生 すると それ 以 降 の DML 文 は 無 条 件 にエラーと なり トランザクションを ROLLBACK することしかできなくなります そのため PostgreSQL にアクセスする Java アプリケーションでは DML を 実 行 する 際 の 例 外 処 理 を 見 直 す 必 要 があります 2.6. エラーメッセージ エラーコードの 違 い JDBC を 利 用 した Java アプリケーションでは データベースで 発 生 した 場 合 のエラーは 例 外 クラス java.sql.sqlexception として throw されます Java アプリケーションではこの SQLException を catch し 内 部 にセッ トされたエラーコード エラーメッセージを 取 り 出 して エラーハンドリングを 行 います ただし Oracle と PostgreSQL では 返 されるエラーコード エラーメッセージが 異 なるため Oracle のエラーコード, エラーメッセージを 前 提 に 実 装 されている 部 分 は PostgreSQL のエラーコード エラーメッセージに 合 わせて 書 き 換 え る 必 要 があります 9/10 2013 PostgreSQL Enterprise Consortium

著 者 版 所 属 企 業 団 体 名 部 署 名 氏 名 アプリケーション 移 行 調 査 編 1.0 (2012 年 度 WG2) TIS 株 式 会 社 戦 略 技 術 センター 中 西 剛 紀 10/10 2013 PostgreSQL Enterprise Consortium