第6回:SQL文の移行(3) (1/2)

まるごと PostgreSQL!
PostgreSQLとOracleによるデータベース相互移行マニュアル

第6回:SQL文の移行(3)
著者:奥畑 裕樹(OKUHATA, Hiroki)   2005/11/11
1   2  次のページ
集合演算

   Oracle、PostgreSQLともに集合演算の機能があります。UNION句、INTERSECT句は両方でサポートされるので変更の必要はありません。しかし、OracleのMINUS句は、PostgreSQLでは等価なEXCEPT句に変更する必要があります。
OracleでのMINUS句の例
SELECT 担当者ID, 担当者名
   FROM 担当者マスタ
MINUS
SELECT 支店担当者ID, 支店担当者名
   FROM 支店担当者マスタ
ORDER BY 1;
PostgreSQLでのEXCEPT句の例
SELECT 担当者ID, 担当者名
   FROM 担当者マスタ
EXCEPT
SELECT 支店担当者ID, 支店担当者名
   FROM 支店担当者マスタ
ORDER BY 1;
   図11は実行結果です。

担当者id |  担当者名
---------- + ----------
|  鈴木
|  小野
|  斎藤
|  小林
|  伊藤
|  佐瀬
|  宇賀神
(7 rows)

図11:EXCEPT句の実行結果


更新のための行ロック

   Oracle、PostgreSQLともに、SELECT〜FOR UPDATEによる行ロックの機能をサポートしているので変更の必要はありません。FOR UPDATE句を使って更新用に特定の行をロックすることで、現行のトランザクションが終了するまでは、ロックした行が他のトランザクションによって更新されたり削除されたりすることがなくなります。もちろん、「SELECT〜FOR UPDATE」を実行したときに、目的とする行のロックがすでに他のトランザクションに獲得されていることもあります。そうした場合には、すでにロックを獲得しているトランザクションの終了を待ってロックを獲得します。

   Oracleには、そうした場合にロックを獲得しているトランザクションの終了を待たずに制御を戻す「NOWAITモード」があります。しかしPostgreSQLには、このNOWAITに相当する機能はありません。目的とする行のロックがすでに他のトランザクションに取られているとPostgreSQLでは必ずウェイトが発生しますので、使うときにはデッドロックにならないように注意しましょう。


パーティション表の移行

   Oracleには、大きな表や索引をいくつかの「パーティション」に分けて管理できる機能があります。次の例は、売上データ表が非常に大きいために年度別にパーティショニングしている際に、4月分のみのデータを抽出するSELECT文です。

SELECT * FROM 売上データ
   PARTITION (data2004)
   WHERE 処理日 BETWEEN
      '2004/04/01' AND '2004/04/30';
   PostgreSQLには、大きな表や索引をパーティショニングして保持できる機能はありませんが、SQL文の移行に際しては、単純にPARTITION句を削除してパーティションの指定を無視することで移行が可能です。

SELECT * FROM 売上データ
   WHERE 処理日 BETWEEN
      '2004/04/01' AND '2004/04/30';
ROWIDの移行

   OracleのROWIDに近いものとして、PostgreSQLにはOIDが存在します。しかし、OIDは基本的に、システムテーブルのプライマリキーとしての使用を前提にしています。OIDの最大値が十分に大きくないため、ユーザテーブルにおけるプライマリキーとしての使用は推奨されていませんので注意してください。


分散問い合わせの移行

   PostgreSQL本体には分散問い合わせの機能はありませんが、contrib/dblinkフォルダに同等の機能を持つdblink()関数がありますので、興味のある方は試してみるとよいでしょう。

1   2  次のページ

書籍紹介
まるごと PostgreSQL! Vol.1
まるごと PostgreSQL! Vol.1 日本での市場シェアNo.1(オープンソースRDBMS部門)データベースソフトPostgreSQLの最新情報を、開発メンバーを含む豪華執筆陣が多面的かつ詳細に解説します。PostgreSQL用クラスタリング/レプリケーションソフト、PostgreSQL⇔Oracle移行、PostgreSQLによる大規模サイト構築法、新バージョンPostgreSQL 8.0先行レビュー、PostgreSQL用.NETデータプロバイダ等々、他では読めない貴重な記事が満載です。

発売日:2004/12/08発売
定価:\1,890(本体 \1,800+税)
奥畑 裕樹(OKUHATA, Hiroki)
著者プロフィール
奥畑 裕樹(OKUHATA, Hiroki)
Javaとオープンソース技術を得意とする技術コンサルタント。最近のテーマは、ソフトウェア開発の全体最適をはかること。気が付けば、10才のときにプログラミングを始めて以来、常に何かを作っている…。


INDEX
第6回:SQL文の移行(3)
集合演算
  ファンクションの移行
PostgreSQLとOracleによるデータベース相互移行マニュアル
第1回 データベース移行
第2回 データの移行(1)
第3回 データの移行(2)
第4回 SQL文の移行(1)
第5回 SQL文の移行(2)
第6回 SSQL文の移行(3)
第7回 ファンクションの移行(1)
第8回 ファンクションの移行(2)
第9回 ストアドプロシージャの移行(1)
第10回 ストアドプロシージャの移行(2)
第11回 ストアドプロシージャの移行(3)
第12回 ストアドプロシージャの移行(4)
第13回 まとめ

人気記事トップ10

人気記事ランキングをもっと見る