2016年7月27日水曜日

Database Lounge Tokyo #1 に参加しました

巷でウワサのキャンセル待ち続出イベントDatabase Lounge Tokyo #1に参加してきました。ありがたいことに抽選あたりました。

感想は一言で言うと「楽しかったけど脳は疲労困憊!」です。
全編通して「ゆるふわ」の定義を再確認したほうが良さそうなゆるふわっぷりに、登壇者の御三方も、参加者もみんな楽しそうでした!
(ひそかに流行らせたい「きゃっきゃうふふ」も同種のものだろうか。きゃっきゃうふふ専門家の意見が求められるところである。あと、一緒にいった会社の後輩ちゃんが「次は本当のゆるふわを見せてやる!」と意気込んでいたw)

■イベント情報まとめ

セッション資料や動画公開されているので、内容を知りたい人は是非こちらを見てください。
資料や動画が公開されています。勉強会の趣旨とかはコチラのグループページへ。

ツイッターまとめました。Database Lounge Tokyo#1 ツイートまとめ
(誰でも編集可能にしたので、漏れてたら追加してください)

資料
MySQLアーキテクチャ図解講座(奥野 幹也氏)
並列クエリを実行するPostgreSQLのアーキテクチャ(海外 浩平氏)
トランザクションの設計と進化(熊崎 宏樹氏)

■セッション

ゆるふわしたセッションたちの「感想文」です。内容が知りたい人は動画をみてください(キリッ!)

・MySQLアーキテクチャ図解講座(奥野 幹也氏)

奥野さんの発表を生で聞くのは初めて。多岐にわたるMySQLの基礎~新機能までを、知らない人向けに、1時間足らずで、次々話していくんだけど、なぜかスッと伝わってくる感じであった。
実況ツイートしてたけど、各所で話されてることが明確なのでなんか書きやすかったです。
こうやってMySQL触った事ないマンだけど知った気になっていくw

・並列クエリを実行するPostgreSQLのアーキテクチャ(海外 浩平氏)

海外さんも一枚かんでた最新機能「パラレルクエリ」を中心にPostgreSQLのアーキテクチャを語る。
ポスグレの内部実装の話は何度も聞いているのでついていけたが、実運用する上では1㍉も知らなくて良い話(失礼w)であった。いや、ほんとは30%ぐらいは知っておいて欲しい。
けどけど、このセッションが難しかったかもしれないけど、ポスグレ使うのは簡単なんですよ!パラレルクエリも簡単に使えるようになるんですよ、なんと無料で!●racle EEオプションに何百万円、何千万円とかけた人だけ使えた機能が、やっとポスグレでも追い付いてきたんですよ!

・トランザクションの設計と進化(熊崎 宏樹氏)

脳みそがパニック。(ダイイングメッセージばりに短いメモだけとれたので、勉強してから出直します。)

えーっと、(恐る恐るまとめると、)トランザクションが守るべき原則(ACID)があって、それを実現しようとすると、今まではRDBみたいな実装、つまりロックで順序を決めて、定期的に変更履歴を書くことでやってきた。しかしそんなのはメモリが貧弱だった時代のものであって、今のハードにあったトランザクションができるじゃないか、という学術レベルの話。
TPC-Cベンチで現公式記録を数倍?数十倍?ぐらい塗り替えるスコアをたたき出す半面、必ず全てのクエリが40msかかる、レイテンシを犠牲にして並列実行性をめちゃくちゃ高めた方式である。
商用製品は2020年ごろには出てくるんじゃないか、とのこと。

■その他

今日の会場はインサイトテクノロジー様に提供いただき、飲み物もビールからソフドリ各種まで振舞っていただきました。ありがとうございました!
インサイトさんの北海道(と言ってた?) と中継で繋がっており、たくさんの方が画面の向こうで見ていたのは印象的でした。上記の飲み物の件といい、この実行力、どなただろうと思ったら社長さんがガッツリ興味を持たれていたとのこと。うーんなるほど。
と思ったらセッション中の講師(主に熊崎さん) に絡む絡むw会場は爆笑(&ちょっと苦笑)でした。

さて、第二回はバックアップをエサにゆるふわしてくださる方々がいらっしゃるそうです。
9月頃開催予定だそうです!

以上

2016年7月23日土曜日

CPI MEGA MIX 2016に参加しました

CPI MEGA MIX 2016に参加してきました。

レンタルサーバーのCPIが中心となり、そのエバンジェリスト8人からWeb 制作に役立つ情報発信ありの、Web 制作者が交流するイベントです。Web製作者じゃないけど紹介いただき興味を持ったので参加してきました。

体調不良でその後のみなさまの動きを追えてなかったのと、ブログ書くのも遅くなってしまいましたが。

■参加の経緯と目的

前回参加したCSS Niteの懇親会で知り合った方が、本イベントに関わっているとのことで紹介いただき、興味を持ったため、キャンセル待ち登録して空きが出たので参加。(というか事前に一言添えていただいて、飛び入り参加歓迎と快く受け入れていただけた!)
データベースがどんな人たちに使われ、課題を孕んでいるのか、その課題はPostgreSQLで解決できるのか、DB目線でどう解決できるか。

PostgreSQL
オープンソースのデータベースで、信頼性や複雑なクエリに強いことが特徴。
年々高機能化、高性能化しており、業務系ではOracleに取って代わる存在として話題になっているが、Web界では多くのCMSが採用してるMySQLにまだまだ遠く及ばない。
読み方は「ぽすとぐれすきゅーえる」、略すと「ポスグレ」「ポストグレス」って感じ。

自分と違う技術者のクラスタにあって実感したいというのがあって、今回もそんな話を1つでも聞けることを期待しつつ、あとは登壇者の一人は知っている方、もう一人は知人の知人だったのでご挨拶もしたいなと。

■イベント全体

イベントは半日のセミナーと、裏ではハンズオンをやっていました。 会場は株式会社 KDDI ウェブコミュニケーションズさんオフィスのオープンスペース的なところで、椅子が100ほど並んでいました。一番後ろに座ったのですが、プロジェクターの高さの関係か、非常に見やすかったのが良かったです。空調はちょっとキツカッタ(後から判明したのですが私が勝手に寒かったのかも。帰宅後から高熱がでたので。ちなみに感染しない系だったので当日絡んだ方も、ご安心を。)
私は所用で遅れて参加、セミナー2コマ目から、最後の懇親会まで参加しました。

■セッション

6セッション+座談会があり、私は遅れて参加したので3つめから。

WebSocket を介してデバイスを利用する Web システム構築術(大月 茂樹氏)

サーバとクライアントのコネクション確立後、そのコネクション上で専用のプロトコルを用いて双方向通信(サーバーからのプッシュ等)が可能なWebSocket技術の応用でした。
PC向けの非接触ICカードリーダ/ライター(SONY PaSoRi)を用いてNFC対応デバイス/ICカードをかざすと、その固有IDを読み取る.Netアプリケーションのデモ、さらにその読み取った情報をWebSocketを介してブラウザから見る(つまり、Webサイトに表示)するサンプルが紹介されました。
NFCに関するわりと詳しい詳細もあり、この1コマでその技術で何ができるかがちゃんとイメージでき、「知っているだけで、あとは工夫次第で難しいことがクリアできる」 ことをお話されていました。

協業プロジェクトにおけるコミュニケーション設計ケーススタディー(古川 勝也氏)

ITエンジニア+料理研究ユニット古川家(KOGAWA-K)として、またローカル雑誌の編集部としてマルチに活躍されている古川さん。イベント会場でのコラボ弁当の出展では、販促に客層を考慮したInstagramの活用を、雑誌の作成ではメンバーの物理的な距離や世代間のコミュニケーション手段の格差を埋めるタスク管理・スケジュール管理をいかに浸透させたか、と言う話でした。
例えば、スマホのクラウド連携機能とか、Googleカレンダーの共有は、メンバーの知識に歩み寄って使えるようにしてあげることで、煩雑さを無くし便利さを実感してもらい浸透した。Instagramの活用では、若い女性から出てきた案を形にすべく、IFTTTで実装。
各コミュニティにマッチしたやり方があり、ちゃんと使ってもらえるようなアプローチを考えることが成功のポイントになるとのことでした。

コミュニティがあなたを強くする~事例に学ぶコミュニティというエコシステムの活用術~ (江頭 竜二氏)

純国産CMSのbaserCMSの作成、コミュニティ運営をされている、そしてそれを中心としたWeb開発会社キャッチアップの社長をされている江頭さん。江頭さんとはPostgreSQLつながりでお話したことがあり、今日はPostgreSQLのコミュニティの発展のために来たようなところもあるので、とても興味深い内容でした。ITコミュニティが早くから活発であった福岡で、どんなコミュニティの変遷があったか、どんな良い事があったかと言う話でした。
人と人のつながり・助け合い、言いだしっぺがやる文化(そしてやった人が結局一番成長できる)、無茶ぶり、飲み会 など!(ざっくりw)そして自虐ネタがおもしろすぎた。
そして秋にbaserCMSの新バージョンが出る、CPIレンタルサーバーにも乗るよ、という発表がありました。PostgreSQLの回し者としては嬉しい話です。触ってみたいです。

クラウドデータベースで業務効率化と、安全な Web サイト運用術(たにぐち まこと氏)

世にデータベースはいろいろあるが、簡単・安全なデータベースがつかえるサイボウズのkintoneでできることが紹介されました。
「簡単」とは、 インターフェース込みで提供されるサービスなのでクエリを書かずに簡単なwebアプリ向けぐらいのスキーマが作れる、データの格納・取り出しができる、ジョインっぽいことも当然できちゃう。
「安全」とは、自身のWebサイトで収集した個人情報をどこに保管するかと言う話で、ローカルに持つよりクラウドに置くのが安全。平文メールで送るよりもSSL通信でクラウドに連携する方が安全。
AWSのRDSのようなクラウドデータベースを想像すると、簡単さと引き換えにクエリによる自由度や性能は犠牲にしているようで、目的に応じてマッチしたら非常に良い、という印象でした。

座談会 2016年上期 Web 業界ニュース~トレンドから未来予測しよう~

LINEやFacebookAPIが公開されさらにコミュニケーションの幅が広がりそう(特にエンジニアにとって、自サービスとLINEの連携的な意味で。)な話とか、古今東西のデザイナー論をまとめたサイトが公開された話とか、ポケモンGOとか、その他、全10トピックぐらい。
総括は、意外とIoTなかったなー、けどIoTもあるよなー的な感じ(?)ちょっとボーッとしてましたごめんなさい。(言い訳するとこの辺が高熱のピークだったんだと思う。)

■懇親会

世界のクラフトビールで乾杯、プレゼントくじ引きがあたりまくる、メイン料理はタコスとチリコンカン、とてもウマかったです。
私自身は参加に至る経緯が紹介であったこともあり、主催の阿部さんを始め、なんかいろんな方とご挨拶させていただき、セッションの質問なり、データベースのこと、Webのこと、知人のことなどなどいろいろ話をさせていただきました。
参加者の中にはOracleの業務システムを置き換える先を探しているという、まさに私が会うべくして会った様な方もいて、とても参加した甲斐のある懇親会でした。
これを機に自分もレンタルサーバーで遊んでみたり、データベースの普及、コミュニティの活性化に一役買えたらなと思いました。(もちろん今もその活動をしてるんだけど。いい刺激になりました。)

以上

2016年7月18日月曜日

CSS Nite「ビジュアル・ドリブンのデザイン」に参加しました

CSS Nite LP46「ビジュアル・ドリブンのデザイン」再演版 に参加してきました。
tweetまとめられてました。 自分もわりとつぶやきました。(実況とは程遠い、私の目線でのつぶやきなので意味があるかは謎い)

とても多くの学び、今後も大切にさせていただきたい出会いがありましたが、それはセミナーの本筋とは関係ないところで、参加レポートと言ってもここで多くを語るべき内容ではないというのが正直なところですが。

■参加の目的

CSS Niteには初参加で、デザイン寄りの畑違いの内容であることはわかっていたのですが、サーバーサイドのエンジニアとして、あと日本PostgreSQLユーザ会の一員として、上の層を担っている人たちの課題、データベースを知ってれば解決できるかもしれないテーマが眠っていないか探りたいと思ってセッション+懇親会に申し込みました。

結果は期待通りで、データベース層ではデザインの領分と直接的なつながりは無さそうであると。
しかし、CMSは日常的に触るのでデータベースの存在ぐらいは意識する方、上から下までWebサービス全般を担う方、地方での勉強会需要など、皆さんの話を聞くことができ、また、私の話にも耳を傾けていただき、今回をきっかけに人とつながれたことは(もちろんそれを狙ってはいたのですが)予想をはるかに超える収穫になりました。


■セッションのこと

どのセッションも、デザインの専門家としていろいろお話していただいて、デザイナーさんの領域がイメージできたというところが今回の総括的な収穫になりました。

普段サーバーしか触らない私の目線からすると、とあるWebサービスで、ユーザが触れるUIの部分、そこから入力を受け取って動作するプログラムの領域、やっとそここら必要があればデータにアクセスしにくるわけで、上の層って誰がどう作ってるんだろうと(一人でWebサービス全部作っちゃうような知人はいるのでw)仕事の領域はどうなってるんだろうという、そんなところがちょっと見えてきました。

で、会場で書いたアンケートがそのまま参加メモというか感想文になってたので、それをそのまま写メって帰ってきました(笑)。以下はその程度の感想文です。セッションの受講レポートが見たい方は別で調べてくださいw

・わずかな工夫で劇的に変わるデザインの対話術(長谷川 恭久氏)

自分が作るデザインが人に伝わるようにどう扱うか(解説する、会話する、意見を求める)という話で、素人目線でも大いに納得でした。
素人からすると、デザイナーさんから出てきた時点で見栄えとしては劇的に違うので頷いてしまう場合が多い。しかしなぜその色なのか、なぜその配置なのか、ぶっちゃけその必然性には全く思考が及んでいませんが、それが「好みに合わない」場合にデザイナーさんのこだわりなのか、モノ申して良いポイントなのか判断しづらかったり、でもこちらの根拠は好みかどうかだけだし、で、製品プロモーション的には意味のない議論になってしまうとか。
ちゃんと会話ができ、必然性を説明いただけるという点こそ、プロと素人の違いになるのかなと思いました。 (素人=イラレ、フォトショとかのツールは使えるちょっとセンスのある人)

・スマホアプリにおけるUIのトレンドと、動的デザインの重要性~テクニカルクリエイターが担うサービス開発の今後(佐藤 洋介氏)~

私の中で注目セッションその1。
「テクニカルクリエイター」とはデザイナー、プログラマーのどの領域を担うのか。(それがサーバーサイドまで意識するようなエンジニアの領域と関わるのか、が注目していたポイント。)
聞くと、動的なUIを実現するようなツールが増えてきて、デザイナーでも自分でプロトタイプを作って動かせるようになってきた。プログラム的な制約がわかってデザインレビューを進めないといけないというように、デザイナーとエンジニアの垣根を低くしていくような取り組みであった。と同時に、やはり業務は分担されていて、サーバーサイドを意識するのはエンジニアだなというのがイメージできてきました。

・こだわりを実現するためのデータを介したコミュニケーション(北村 崇氏)

私の中で注目セッションその2
データとはデータベースか。例えばデザイナー側でWebサービスのレスポンスまで意識してデータ層のことを考えるの?!などと思って受講しましたが、「データ=入稿データ」のお話しでした。
入稿データのレイヤにわかりやすい名前をつけるとか(ソースコードにコメント書くとかに似てる?!)普通に仕事をするうえで、自分の成果物を次の工程で待っている人に配慮した仕事をしましょうという話で、それはそれは、デザインじゃなくとも意識しないといけないよなーと思いました。

・クリエイティブ・ディレクション~リアルダメ出しから発掘するデザインのヒント~(李 優未氏)

より良いアウトプットに近づけるための仕事の進め方、育成の方法という話。実例は素人目にはどれもよく見えてしまってあんまりビフォーアフターの差がわからなかったですが、本題は大いに納得でした。
ステークホルダーの意見を求める場をつくりましょうとか、そのために意見しやすいフォーマットでだしてもらいましょうとか(スマホUIの例ならスマホの幅で縦長に出力した短冊型でWebサイトを印刷して付箋貼っていってもらう)、この辺は一本目の長谷川氏の会話しなさいという話と重なる印象でした。部下の育成なら、その人のレベルに合わせた指摘のやり方をするとか。正解がないもの(だけど失敗はある、と言えば良いのか)を正しく教えていくための方法は難しそうだが大事であると思いました。

・エディトリアルとウェブ、コンテンツファーストでつながるビジュアルドリブン(筒井 美希氏、関口 裕氏)

雑誌(≒エディトリアル)出身の同期お二人組とのこと。トーク形式で進めつつ、雑誌とWebの違いあるある、結局のところ両者の違いはなにか、共通するところは何かを語っていった。
で、コンテンツに合わせて、書式をはじめに決める(WebでいうところのHTMLとCSSの分離)場合もあれば、フリーフォーマット?で各ページごとに適切な配置を考えるケースもある。後者は従来エディトリアルとされてきたような部分だが、Webでもそれはありえるぞと。(エディトリアルという初見の単語だったので、どういうイメージで使われているかとかよくわかんなかったけど。)
これは、スライド作成で使える話ではあるかもしれない。いつもの「タイトル、本文数行、図」みたいな構造化してるやつと、1スライドにどーんと数字がでてきたりするスタイルとの使い分け。みたいな。なんか考えたい。

・築城10年、落城3日。こだわりあるWebデザイン、やるからには本気で良いものを!(中川直樹氏)

デザインに依頼者の意図を余すところなく取り込むためのやりかた。
お願いする側としては、近くて遠い(表現したい自社のイメージはあるのかもしれないがそれを伝えられなくてあきらめる?結局そのイメージって自社内ですら共有できてる?)話でした。
製品販促の施策とかは考えることがよくあるので、デザインでその一端を担うところをちゃんと考えると効果ありそうかもと思いました。

・クロージングトーク:PVを稼ぐグラフィックの作り方(矢野りん氏)

PV=拡散された数×クリック率でクリック率を上げるところでデザインが威力を発揮する話。具体的には写真がSNSによってどう切り抜かれるか知って、それに合わせた画像を用意せよ、等。
これは素人目にも結果が理解しやすく、写真の切り抜きとか撮影の時のテクニックでも使えそうなので 自分でUPする写真なんかでも気にしてみようと思いました。

■会全体についてや懇親会のこと

イベント全体を通して、会話を生むとか、初めての人にも優しい、けどリピーターとか全体的には良く見知った人たちの集い、その両立をうまく実現しているようでした。

昼に会場に到着すると、広い部屋に広々とスペースが取れるよう机が配置され、うーんさすが有償イベントと言いう感じ。「空席」の紙を裏返すと今日のタイムテーブルになっており、新参者にも優しい配慮であるなと感じました。
セッション前には隣の人と強制自己紹介タイム!自分は懇親会までいくのでボッチ回避にはありがたすぎるけど恥ずかしい企画。で、お隣、後ろの方は懇親会でなかったのですが、「僕初めてなんです~」というところから、いつもは○○な雰囲気だよ~などと教えていただきました。そして混んできて椅子が追加された後も、ちょっと腕当たっちゃったりしても問題なしな雰囲気になりましたw

終了後の懇親会は会場の1Fのお店。自由な雰囲気に最初こそ戸惑いましたが、講演者の周りを囲むように席が配置され、とっかかりの会話が生まれやすく、そこからは隣の人とフランクに話せました。
ここでみなさんとお話したことでは、
  • デザイナーとエンジニアの領域は、やはりしっかり分かれている
  • デザイナー寄りの人ではデータベースはブラックボックス
  • CMSとかやっている人だと、データ層の存在ぐらいは意識するがクエリまでは意識しない(CMSがやってくれる範囲か)
  • 参加者側では、Webサービスを作っている人とかいて、マジでフルスタックに求められてツラたんそうだったけどやりがいありそう。
  • 学生を教育する立場の人では、その学生の方向性が決まってないのでデザイン系でもphpからデータベースにアクセスするぐらいは教えているとか
デザイン系の人がphpやりだして、ってことはデータにアクセスするのでSQLも覚えて、その先まで一人でやらないといけなくなったらDB設計・運用とかってなるのはさすがに範囲広すぎだよなと思った。

今日の目的には以下があり、どちらも上々(お金かけてきた価値あった)かな、と思います。
  • データベースの人がちょっと興味もって来てみたよ、という存在アピール(ツイートしてたらすぐに気づいてもらえた!)
  • 参加者の中で数人でも良いので、データベース系イベントの開催地やターゲット層のヒントになる方とお話しする(懇親会まで参加して本当によかった)
そしてデザインの人が語ることを自身の仕事に置き換えてみたり、きれいなスライド、参加しやすい運営など何から何まで勉強になりました。また機会を見つけて参加したいと思います。

2016年7月1日金曜日

Ora2Pgでやってみよう!テーブル定義移行編

こんにちは、kkidaです。
沖縄合宿2日目です。

昨日に引き続き、他DBからPostgreSQLへの移行の話を聞いていただいた方へ、是非この機会に紹介しておきたいのが、OracleまたはMySQLからテーブル定義・データを抽出してPostgreSQL用に書き換え、ロードまでを一括実行できる便利ツール、Ora2Pgを使用したデータ移行(とっかかり)です。


■ここでは何をやるか

移行してみるにあたり、Ora2Pgのオプション設定等は細かくはいろいろあるのですが、最初のハードルは「使える状態にすること」だと思います。(経験談w)
まずは使える状態にして、Oracleからテーブル定義を抜いてくるところができれば、あとはOra2Pgのマニュアルとにらめっこで、オプションをいろいろいじってみて、やりたい事に近づけるのではないでしょうか。

昨日紹介したPostgreSQL on CentOS 7環境で構築します。
例によって、DBサーバーは外部公開しづらい前提で、CentOSのインストールDVDからyumできるもの以外は、個々にモジュールを持って来てサーバーに配置するようにして、実際に動くところまでやってみました。


■準備

以下をダウンロードしておきます。WinSCPなどの転送ツールを使用して、サーバーの/media/ora2pgにrootユーザの所有で配置しておくものとします。
今回は使用したバージョンまで書いておきますが、相手のOracleのバージョンや、いずれかのモジュールの将来のバージョンでは、これらの組合せがそのままでは使えない可能性があることをご注意ください。

Ora2Pgはperlスクリプトで、各DBへの接続はDBD::xxxというDBへの接続ライブラリ(xxxはDB製品名、DBD::Oracleとか)を用います。その前提となるパッケージで、yumで入るものは入れてしまいましょう。また、昨日の続きなので、yum groupinstall "Development Tools"は導入済みとします。
# mount /dev/cdrom /media/CentOS
# yum --disablerepo=* --enablerepo=c7-media install libdbi-dbd-pgsql
# yum --disablerepo=* --enablerepo=c7-media install perl-ExtUtils-MakeMaker
# yum --disablerepo=* --enablerepo=c7-media install perl-DBI

■Oracle Clientのインストール

以下の順でRPMからインストール、環境変数を設定します。後続の手順であるDBD::Oracleのインストール時に、ここで作成したOracleのライブラリが参照されます。
# cd /media/ora2g
# rpm -ivh oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
# rpm -ivh oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
# rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm
# export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
# export ORACLE_HOME=/usr/lib/oracle/11.2/client64/

■DBD::Oracleのインストール

以下の手順でソースファイルを展開、インストールします。
# cd /media/ora2pg
# tar zxvf DBD-Oracle-1.74.tar.gz
# cd DBD-Oracle-1.74
# cp ../DynaLoader.pm ./.
# perl Makefile.PL
# make install

■Ora2Pgのインストール

以下の手順でソースファイルを展開、インストールします。
# cd /media/ora2pg
# tar jxvf ora2pg-17.4.tar.bz2
# cd ora2pg-17.4/
# perl Makefile.PL
# make && make install

■Ora2Pgを使ってみる

構築が完了すると、/usr/local/bin/ora2pgコマンドと、/etc/ora2pg/ora2pg.conf.distファイルが出来上がります。Ora2Pgは、詳細動作を全て設定ファイルに書いて、ora2pgコマンド実行時にその設定ファイルを指定するという使い方をします。

設定ファイルの編集
# cd /etc/ora2pg
# cp ora2pg.conf.dist ora2pg.conf
# vim ora2pg.conf

最低限書いておく必要があるのは、Oracleへの接続方法と、移行対象です。
  • ORACLE_DSN      dbi:Oracle:host=<oracleのホスト名>;sid=<SID名>
  • ORACLE_USER    <Oracleの移行対象オブジェクトを触れるユーザー名>
  • ORACLE_PWD     <上記ユーザのパスワード>  
  • SCHEMA           <移行対象スキーマ名>
設定ファイルができたら、ora2pgコマンドを実行します。-cで設定ファイルを指定します。
# cd <任意のディレクトリ>
# /usr/local/bin/ora2pg -c /etc/ora2pg/ora2pg.conf
[========================>] 1/1 tables (100.0%) end of scanning.
[========================>] 1/1 tables (100.0%) end of table export.
# ls
output.sql  ### PostgreSQL用のスクリプトが生成されている

出力されたファイルの中身を確認すると、PostgreSQL用のDDLスクリプトであることがわかります。参考までに、Oracleではnumber(8)、varchra2(30)、dateを各列のデータ型としていましたがPostgreSQLの対応するデータ型に書き変わっていることが読み取れます。
# more output.sql
-- Generated by Ora2Pg, the Oracle database Schema converter, version 17.4
-- Copyright 2000-2016 Gilles DAROLD. All rights reserved.
-- DATASOURCE: dbi:Oracle:host=192.168.160.179;sid=v11204

SET client_encoding TO 'UTF8';

\set ON_ERROR_STOP ON


CREATE TABLE test (
  no integer NOT NULL,       --- number(8) がintegerに変換された
  val varchar(30),           --- varchar2(30) がvarchar(30)に変換された
  time timestamp             --- date が timestampに変換された
) ;
ALTER TABLE test ADD PRIMARY KEY (no);

本例では、Ora2Pgの実行時設定はほとんどをデフォルトとし、Oracleから指定スキーマの定義情報だけを抽出し、PostgreSQL用のスクリプトを生成するところまでとなりました。
定義情報と併せてデータも抜き出す設定であれば、一気にデータ移行が済んでしまいますし、PostgreSQLへの接続情報を書いておけば、直接PostgreSQLに投入することもできます。詳細動作はOra2Pgのマニュアルから、やりたいことに合わせて試していくことをお勧めします。

以上です。

CentOS7上でのPostgreSQL構築手順(RPM編)

はいさい!

OSC 2016 OKINAWAに参加すべく、沖縄にやってまいりました、kkidaです。

OSCでは、前に福岡福山(広島)でしゃべらせてもらった、「他DBからPostgreSQLへの移行」の話をします。つまり、新たにPostgreSQLを使い始めるかもしれない人にこそご参加いただきたいわけで、せっかくなので、受講だけじゃなくて、一歩踏みこんで試すところまでやってもらいたい。そのための情報を整備しとかなきゃなーと思って、ひとり合宿in沖縄で本稿を書いています。

ここでは、最近仕事でCentOS 7を触っているので、自分の復習も兼ねて、CentOS 7上でのPostgreSQLインストールを超初心者向けに書こうと思います。

■PostgreSQLインストール方法の選択肢

主要なOSディストリビューション向けにはいくつか方法があって、日本PostgreSQLユーザ会のダウンロードページで各配布先が紹介されています。初心者向けなので、これらのページの渡り歩き方から紹介しておこうと思います。

 ●ダウンロードリンク
  • Windows:GUI環境(WindowsまたLinux)向けにインストーラーが提供されていて、簡単にインストール先を変えたい場合は便利です。
  • Linux(yum):実は私、yumでPostgreSQLいれたことありません。DBサーバーはインターネットにつながっていないケースが多く、ハードル高かった記憶があります。
  • Linux(rpm)、Linux(apt):目的のパッケージをダウンロードしサーバーに転送しておけば良いので、知っていれば簡単ですが知らないと「?」が出まくりです。今回はこれを説明(後述)します。
  • ソースコード:PostgreSQLの実行ユーザやインストール先を変えたい場合、または詳細動作のカスタマイズをしたい場合はソースコードからインストールすることになります。

 ●インストールガイド
 本稿を書くにあたってリンク先を確認しましたが、そこそこ古く
 「そのまま実行したら上手くいった」レベルの情報は期待できなさそうです。

 ●その他
 PostgreSQLの本体開発に参加する人向けのWikiや、JPUGのマスコットロゴについて
 書かれています。(ダウンロードページなので、そういうのも一色多に配布してるw)

※ちなみに、日本PostgreSQLユーザ会では、上記ウェブサイトの刷新を鋭意進めている最中で、本稿の内容は新しいものがリリースされたら読み替えが必要になります。もって1年の命でしょう。

■PostgreSQL(RPM版)のインストール準備

今回はRPM版でPostgreSQL 9.5をインストールします。
配布先からズンズンたどって、以下を入手します。
  • postgresql95
  • postgresql95-contrib
  • postgresql95-libs
  • postgresql95-server
2016年7月の現時点だと、各リンク先に「postgresql95-9.5.3-2PGDG.rhel7.x86_64」のようにPostgreSQL 9.5.3のRPM内のtypoを修正した「-2」がありますので、こちらを使用します。
(初心者向けに直接DL先を挙げておくなら、ダウンロードしサーバーに配置しておくべきは、postgresql95contriblibsserverの4つです。←リンク先は2016年7月時点のものであることに注意)
開発者向けのincludeファイルも必要である場合は、develも取得します。まあこの辺は他のソフトウェアと変わらないでしょう。

サーバーへの配置はwinSCPとかを使って、rootユーザの持ち物で/media/pg95とかに置いておけば良いです。
# mkdir -p /media/pg95 (ココにRPMを転送)
# ls /media/postgres
postgresql95-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-contrib-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-devel-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-libs-9.5.3-2PGDG.rhel7.x86_64.rpm
postgresql95-server-9.5.3-2PGDG.rhel7.x86_64.rpm

RPMだと、前提パッケージが足りていないと途中でこけてしまいますが、CentOS 7.2ではOSメディアから"Development Tools"を入れておけば大丈夫でした。
# mount /dev/cdrom /media/CentOS
# yum  --disablerepo=* --enablerepo=c7-media groupinstall "Development Tools"

■インストール

ここまで準備できれば、インストールは簡単です。依存性でつまづく事の無いよう、以下の順にインストールします。
# rpm -ivh postgresql95-libs-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-devel-9.5.3-2PGDG.rhel7.x86_64.rpm
# rpm -ivh postgresql95-server-9.5.3-2PGDG.rhel7.x86_64.rpm

これで、/usr/pgsql-9.5配下にPostgreSQLがインストールされます。postgresユーザが作成され、systemctlコマンドで起動・停止の管理ができるようになります。
# ls /usr/pgsql-9.5
bin  include  lib  share
# systemctl list-unit-files | grep postgres
postgresql-9.5.service disabled

ところが、まだデータベースとして使用できる準備はできていませんので後続の手順を実施してから起動です。(以前のバージョンではこの時点で使えたような記憶がある。)
どうやら最近のRPM版では、初期設定(データベース作成、PostgreSQL用語でいうinitdb)をまるっとやってくれる便利コマンドが用意されているようで、これを使います。
# cd /usr/pgsql-9.5/bin
# ./postgresql95-setup initdb --no-locale
Initializing database ... OK

なななななんじゃこりゃーって感じでしたが、そうなのです。自動化しちゃうと、出来上がったデータベースクラスタがどこにどうできてるの?と気になってしまいますが、初心者向けなののでココは後に譲ります。いつか調べる。(@soudaiさんに指摘いただき、日本語環境においては是非やっておくべきinitdbコマンドのオプション(--no-locale)を追記しました。2016.7.11)


■起動と自動起動設定

初CentOS 7だったので、sysytemctl慣れしたい私の勉強にお付き合いください。笑
# systemctl list-unit-files | grep postgres
postgresql-9.5.service disabled
# systemctl start postgresql-9.5.service
# systemctl status postgresql-9.5.service
● postgresql-9.5.service - PostgreSQL 9.5 database server
  Loaded: loaded (/usr/lib/systemd/system/postgresql-9.5.service; enabled; vendor preset: disabled)
  Active: active (running) since 水 2016-06-22 22:31:50 JST; 14s ago

起動時のログも拾ってくれるんですね。なかなか便利。(実は↑の初期設定が必要なことに気づかす、起動に失敗してログがでたことで発覚しました。systemctlに感謝!)
自動起動はデフォルトでdisabledでしたので、必要に応じて有効にしておきます。
# systemctl enable postgresql-9.5.service
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.5.service to /usr/lib/systemd/system/postgresql-9.5.service.

# systemctl list-unit-files | grep postgres
postgresql-9.5.service enabled

ついでに、社内サーバー前提でRPMからインストールを解説しているわけですので、デフォルトで有効になっているfirewallはoffっちゃいましょう。(異論は認める。)
# systemctl stop firewalld.service
# systemctl disable firewalld.service

これで、データベースが起動しました。
ここから先は、PostgreSQLの初期設定であり、OSやバージョンによらない内容を別の投稿としたいと思います。

では、今日から楽しいPostgreSQLライフをお送りください。

PostgreSQL11のJITコンパイリングを試す

llvm-postgres 開発中のPostgreSQL11でJIT(Just In Time=実行時)コンパイリングを行い、クエリ性能の高速化を期待する新機能が登場した。 本記事では 構築方法を確認したので紹介。JITコンパイ...