「オープンソース」を使ってみよう
(第49回:OracleからPostgreSQLへの移行時に見落としがちなポイント10選)

No Comments
このエントリーをはてなブックマークに追加

OracleユーザがPostgreSQLを使用する時に注意する点

はじめまして、サークル「まぐろのみぞおち」のまぐろと申します。

弊サークルでは主にPostgreSQLに関する知識を同人誌にまとめて、より多くの方にPostgreSQLを知ってもらい、ユーザを増やすことでコミュニティに貢献しようと活動しております。

最近はOracle databaseからPostgreSQLに移行を検討する方も多く、ユーザを増やすチャンス!ということで、私が実際にOracleからPostgreSQLに移行する際に困った点や、Oracleユーザからここはどうなっているの?と聞かれた点を中心に、OracleからPostgreSQLに移行する際の注意点を一問一答形式でご紹介します。

Q1. SQLに互換性はありますか?

A. ほとんど問題ありませんが、いくつか修正が必要な点があります。

PostgreSQLはSQL標準にできる限り従うことを念頭に置いて作成されています。そのため、通常使用するSQLに関してはほとんど修正する必要なくそのまま使用できます。

ただし、SQL標準に完全に合致したデータベース製品というのは存在しません。それはPostgreSQLでもOracleでも同様で、Oracleの”方言”をPostgreSQLでも通じるように修正しなければなりません。

いくつか修正点の例をご紹介します。

  • dual表はOracleにしか存在しません。

    • 実はSELECT文はFROM句がなくても文法的には問題ありません。PostgreSQLにはdual表は存在しませんので、削除しましょう。

  • 互換性のない関数+

    • たとえばNVL関数のように、PostgreSQLには存在しない関数は、代替手段を考える必要があります。

  • (+)でJOINしている

    • Oracleでも古い書き方なので今は珍しいかもしれませんが、当然、PostgreSQLでは動きません。通常の外部結合に書き換えましょう。
  • 空文字列の扱い

    • Oracleでは空文字とNULLが等価の扱いをされます。PostgreSQLではもちろん異なる扱いになるため、NULLを条件にしているSQLがあったら修正しましょう。

Q2. データ型は共通していますか?

A. 全く同じではありません。合わせて修正する必要があります。

データ型は共通しているものもありますが、変えなければいけないものも多くあります。代表的なデータ型の置き換えの例をご紹介します。


Q3. PostgreSQLでテーブルを作成したら、テーブル名が小文字になりました

A. PostgreSQLでは、小文字に変換されます。

Oracleではテーブル名やカラム名に英字を指定すると、自動で大文字に変換します。しかし、PostgreSQLでは逆にすべて小文字に変換します。PostgreSQLでどうしてもテーブル名を大文字にしたい場合は、テーブル名をダブルクォーテーションで囲ってCREATEします。

しかし、私はあまりこのように指定するのはおすすめしません。なぜならば、作成時だけではなく、SELECTなど他のSQLでテーブルを指定する際にもダブルクォーテーションで囲まなければならなくなり、かえってOracleから移行するときのSQLの修正量が増えてしまうからです。

通常のSELECT文を書くとき、Oracleではテーブル名を大文字で書いても小文字で書いても特に問題ありません。それは、小文字で書いても実行時に大文字に変換してくれるからです。PostgreSQLでも同様で、ただ大文字で書いても小文字になるだけで、通常使用する分にはテーブル名が大文字でできていても小文字でできていても、意識する必要はありません。見た目が大文字から小文字になるだけで本質的には問題ないのに、わざわざ他のSQLの修正量を増やす必要はないと思います。

Q4. PostgreSQLでもストアド・ファンクションは使用できますか?

A. 使用可能ですが、完全に互換はしていません。

PostgreSQLにも、OracleのPL/SQLに見た目がそっくりな、PL/pgSQLという言語があり、同じようにストアド・ファンクションが書けます。

しかし、PL/SQLが様々な機能を持ち、かなり広範囲で使用されているのに比べ、残念ながらPL/pgSQLは機能的にも性能的にも劣ります。よく似た文法とはいえ修正も大変ですし、無理にストアド・ファンクションやストアド・プロシージャにするよりも、別の言語に書き換えるという方法も検討することをおすすめします。

Q.5 表領域は作成できますか?

A. 同じような機能を持つ「テーブル空間」というものが存在します。

Oracleは表領域というファイルを作成し、その中にテーブルやインデックスを作成します。OracleとはファイルI/Oのアーキテクチャがまったく異なり、PostgreSQLのテーブル空間はディレクトリです。テーブル空間として指定したディレクトリ配下に、テーブルやインデックスがファイルとして存在します。使用する場面としては、異なるディスクにテーブル空間を配置して負荷分散するなど、表領域とそう変わらない使い方ができます。

しかしOracleの表領域が初期サイズや最大サイズを指定でき、ディスク使用量を制御できるのに比べ、テーブル空間はディレクトリなのでサイズの指定はできず、最大サイズはディスクの限界までとなります。

Q.6 REDOログサイズは変更できますか?

A. できないことはありませんが、現実的ではありません。

OracleでいうところのREDOログは、PostgreSQLではWALやWALファイル、トランザクションログと呼ばれます。OracleではREDOログのサイズをインストール後に変更できますが、PostgreSQLのデフォルトではWALは1つ16MBで、インストール後にこれを変更することはできません。変更できるのは、ソースからビルドするときのみ。実際にはほとんど行うことはないと思います。

ただし、1つ16MBのWALをどのくらいの量保持するか、という設定は可能です。デフォルトは1GBですが、これは一般的には小さすぎます。性能にも関わる設定ですので、よく調べて設定してください。

Q.7 サーバでPostgreSQLを起動しましたが、リモートからデータベースに接続できません

A. listen_addressesか、pg_hba.confの設定に誤りがある可能性が高いです。

PostgreSQLは、デフォルトではローカル接続のみを許可しています。リモートからの接続を許可したい場合、まずpostgresql.confのlisten_addressesを「localhost」から「*」に変更します。この設定でローカルだけではなくすべてのIPアドレスから接続を受け付けるようになります。

しかしこれだけではリモートから接続できません。もう一つの設定ファイルであるpg_hba.confを修正し、リモートからのアクセスを許可する必要があります。

デフォルトではこのように、ローカルからのアクセスのみ、しかもパスワード入力無しで受け付ける設定になっています。

すべてのアドレスからの接続を受け付け、かつパスワード認証を必須にするには、次のように修正します。

これでも接続できない場合はファイアウォールの設定を見直してください。なお、Oracleと異なり、PostgreSQLにはリスナーを別途起動する必要はありません。インスタンス起動時に接続待受プロセスが起動します。

Q.8 ユーザを作ったのにスキーマが作成されません

A. PostgreSQLではユーザとスキーマは無関係です。

Oracleではユーザを作成すると、ユーザと同名のスキーマが作成されます。利用者はほとんどその存在を意識することはなく、「ユーザ=スキーマ」と考えても問題ないくらいです。しかし、PostgreSQLではユーザとスキーマは無関係です。

PostgreSQLではデータベースを作成すると、自動的に「public」という名前のスキーマを作成します。通常はこのスキーマにテーブルなどを作成しますが、その理由は「search_path」という設定にあります。

search_pathはCREATEやSELECTなど、SQLを実行する際に参照するスキーマの優先順位を指定します。デフォルトは「"$user", public」で、ユーザ名と同じスキーマを優先していますが、そのようなスキーマはデフォルトでは存在しないので、publicスキーマが優先されます。

つまり、ユーザ名と同じ名前のスキーマを作成すれば、Oracleと同様にユーザ名と同じスキーマにテーブルなどが作成できます。

Q.9 データベースを複数作りました。一時的にあるデータベースを落とせますか?

A. 特定のデータベースだけシャットダウンすることはできません。

PostgreSQLでは1つのインスタンスの中に複数データベースを作成できます。しかし起動と停止はインスタンス単位で行われ、データベース単位で起動・停止はできません。

どうしてもデータベースに誰もアクセスさせたくない、というときは、データベースからコネクト権限を削除する、という方法があります。

この方法を使えば不要な接続を排除できますが、データベースをメモリ上から完全に排除するのは難しいでしょう。

Q10. サーバの文字コードをShift_JISにできますか?

A. PostgreSQLでは、サーバの文字コードをShift_JISにすることはできません。

PostgreSQLは様々な文字コードに対応していますが、サーバ側の符号化方式としてShift_JISを指定することはできません。日本語を扱う場合はEUC-JPか、UTF-8を使用することになります。

しかし、クライアント側の符号化方式としては、Shift_JISをサポートしています。PostgreSQLは、サーバ側の符号化方式が何であれ、クライアントからの要求に対し結果を返すときは、クライアントの符号化方式に変換して返します。そのため、ユーザがサーバ内の文字コードが何であるかを意識することはあまりありません。

クライアント側で文字化けしてしまうというときは、client_encodingを変えましょう。

最後に

Oracleと異なる点を一問一答形式で10箇所ご紹介しました。基本的な質問だったりちょっと踏み込んだ内容だったりしますが、すべて私が実際に直面したり、Oracleユーザの方に質問されたりしたものです。つまり、OracleユーザがPostgreSQLを使用するときに疑問に思う可能性が高いものであると思います。このブログを読まれた方がPostgreSQLを使用するとき、またはPostgreSQLについて質問されたときの参考にしていただければと思います。

もちろん、ここに挙げた点以外にも共通点・相違点があります。ご質問等ございましたら、私のTwitterにリプライしていただければと思います。それでも解決しない疑問は、日本PostgreSQLユーザ会へ!

============================

サークル「まぐろのみぞおち」代表

まぐろ @tameguro

============================

2月22-23日開催!
OSC2019 Tokyo/Spring 終了しました!!

No Comments
このエントリーをはてなブックマークに追加

オープンソースカンファレンス事務局です。

2月22日(金)・23日(土)に明星大学で開催した
オープンソースカンファレンス2019 Tokyo/Springをレポートします。

■開催のまとめ
来場者数   : 2/22(金) 約430名・2/23(土) 約580名、合計 約1,010名
参加団体数  : 99(企業/団体 31、コミュニティ 68)
展示ブース数 : 89(企業/団体 28、コミュニティ 61)
セミナー数  : 68(1日目 28、2日目 40)
コミュニティ企画 : 2(2日目:2)
Twitterハッシュタグ:#osc19tk
展示ブース一覧
セミナータイムテーブル(2/22-金)
セミナータイムテーブル(2/23-土)

=展示ブース=
89の団体が出展し、2階2部屋、5階4部屋で開催した展示。
展示ブース一覧

2階は協賛・後援団体がメインの展示会場です。
ブースで熱心に話し込んでいたり、デモを体験したりと、賑わっていました!

▼展示会場の様子(2階)


Photo by: tishimoto(4枚)

書籍販売ブース!
会場限定割引や購入特典などもあり、沢山の方が立ち寄っていました。

▼オライリーさん           ▼翔泳社さん

5階はコミュニティメインの展示会場です。
今回も、メインの2部屋の他に、プラレール全加算器の展示で1部屋、
オーディオ関連の展示を集めた1部屋があり、4部屋での展示となりました。

▼展示会場の様子(5階)


Photo by: tishimoto(3枚)

プラレール全加算器展示
これを楽しみにしている人も多いのでは?!
「線型算法同好会」によるプラレール全加算器展示です。
今回スペースはコンパクトでしたが、いつもより高さのある展示となっていました。


Photo by: tishimoto

オーディオ関連展示
「Analog&RaspberryPi電子ギーク団」と「ラズパイオーディオの会」が展示していた、
オーディオ部屋。

【特別企画】
Raspberry PiでLED信号を光らせよう セルフハンズオン

空席があれば自由に参加可能で、簡単なScratchやPythonプログラミングで
Raspberry Piを使った電子工作の基礎が学べるセルフハンズオン企画。
1月に開催したOSC大阪で好評だったため、OSC東京でも開催しました。

展示ツアー(~ガイドと一緒に展示見学しましょう~)
1日目の12時から開催された展示ツアー。
ピンクTシャツの団長を先頭に各ブースを回り、見所を紹介いただきました。
今回は15名以上の方に参加いただき、大盛況でした!

=セミナー=
1階・2階・5階の教室で行われたセミナー。
2/22(金)は5トラック、28セッション
2/23(土)は7トラック、40セッション
セミナータイムテーブル(2/22-金)
セミナータイムテーブル(2/23-土)
セミナー資料公開(一部)

▼セミナーの様子


キャリアセミナー
転職や今後のキャリアについてをテーマにした、キャリアセミナー。
2日間で7コマ開催されました。

ライトニングトーク新人戦
初めてライトニングトークに挑戦する人のための企画です。
発表者は初めての方ばかりなので、これから挑戦しようと思っている方は
次回開催の際にはこの機会をぜひ活用してください!
エントリー一覧

ライトニングトーク(by OSCスポンサー)
OSCスポンサーによるライトニングトークです。
企業の取り組みや、個人的な取り組みなど様々な発表がありました。
エントリー一覧

コミュニティ企画
コミュニティが独自に集客から運営までを行う企画です。
今回は2団体の参加がありました。
コミュニティ企画一覧

【併催イベント】
「コンピュータと学び」のフォーラム 2019 春

今回は『プログラミングの取組み』に焦点を当て、教育現場の実践事例を
ご紹介いただき、教育現場、地域、教員養成機関から「プログラミング教育」に
ついての展望を考えることを目的として開催されました。
1年前のOSC2018 Tokyo/Springからはじまり、今回で3回目の開催となります。
【併催イベント】「コンピュータと学び」のフォーラム 2019 春

=スタンプラリー&くじ引き=
展示ブースに設置されているスタンプをすべて集めると、
景品がもらえる、スタンプラリー。
今回の景品は、デニムポーチとカラビナ付きクッションポーチの2種類でした!

配布プログラムに挟まれているアンケートを提出すると、
スポンサーとコミュニティから提供いただいた景品が当たるくじ引きができます。

=懇親会=
1日目の夜に大学内の学食で行われた、懇親会。
120名以上の方にご参加いただきました。

最後まで沢山の人で賑わいました!

=第6回 OSCアワード授賞式=
2日目16:10からのライトニングトークの前に、
第6回 OSCアワードの授賞式が行われました。

今回受賞された個人・団体(敬称略)
・株式会社サードウェア 久保 元治
・Future Versatile Group/MyDNS.JP T.Kabu(蕪木 岳志)
・日本MySQLユーザ会 坂井 恵
・東海道らぐ
・mikutter


Photo by: tishimoto

授賞式では、記念品としてクリスタルの盾が贈られました。
おめでとうございました!!
「第6回 OSCアワード」受賞者のお知らせ

=ライトニングトーク=
第6回 OSCアワード授賞式の後は、いつも大盛況のライトニングトークです。
今回も最後の締めくくりにふさわしく、立ち見がでるほど大盛況でした!
エントリー一覧


Photo by: tishimoto

長崎県南島原市の素麺をかけたじゃんけん大会もありました!


Photo by: tishimoto

最後に・・・
ご来場いただいた皆さま、出展いただいた皆さま、
ボランティアスタッフとしてお手伝いに来てくれた学生スタッフの皆さん、
ありがとうございました。
またいつも会場をご提供いただいている矢吹先生はじめ明星大学情報学部
関係者の皆さま、ありがとうございました。

次回、OSC東京は9月-11月の開催になる予定です。
開催が確定しましたら、OSCのサイトにてご案内いたします。
秋のOSC東京でお会いしましょう!

OSPN Press 第97号 (2019/2/6発行)

No Comments
このエントリーをはてなブックマークに追加

■今後の開催は「OSC浜名湖(2/10)」と「OSC東京(2/22-23)」です!
■「第6回OSCアワード」受賞者のお知らせ
■[開催報告]OSC大阪、無事に終了
■ITニュース・オープンソースリリース情報
■オープンソースコミュニティ紹介 〜from OSS コミュニティ辞典〜
-東葛飾PM&A研究所
-KUSANAGIユーザグループ
More

OSPN Press 第96号 (2019/1/9発行)

No Comments
このエントリーをはてなブックマークに追加

■今後の開催は「OSC大阪(1/25-26)」「OSC浜名湖(2/10)」
「OSC東京(2/22-23)」です!
■[開催報告]OSC島根、OSC福岡、OSCエンタープライズ、無事に終了
■ITニュース・オープンソースリリース情報
■オープンソースカンファレンス開催レポート
-OSC2018 Shimane
-OSC2018 Fukuoka
-OSC2018 .Enterprise
More

寒波の押し寄せる三連休。オープンソースカンファレンス2019 Hamanako を熱く開催!

No Comments
このエントリーをはてなブックマークに追加

2019年2月10日(日)、オープンソースの文化祭「オープンソースカンファレンス2019 Hamanako」(以下OSC浜名湖)を開催しました。
前日の2月9日(土)は、近隣会場でAndroidの祭典「ABCD Damonde Hamamatsu」が行われ、浜松でITを満喫できる2日間となりました。

▼会場は浜松市市民協働センター


開催日:2月11日(日)
会 場:浜松市市民協働センター
来場者:約150名
セミナー:20コマ(1コマあたり15分)
展 示:30ブース
ハッシュタグ:#osc19hm(togetter)

→セミナータイムテーブル
→展示ブース一覧

今年の開催レポートは実行委員のゆかがお届けします。
OSC浜名湖のTwitterハッシュタグのまとめページ(togetter)からも、開催の様子をご覧いただけます。

OSC浜名湖の会場は、浜松市市民協働センター2Fギャラリー。
セミナースペースと展示ブースに簡易的に区切ったオープンな会場です。
セミナーや興味のあるブースで話を聞いたり、参加者同士で交流したり、大人の文化祭らしい賑わいがありました。

More

Older Entries Newer Entries