会社で聞かれた 「UNION が含まれるビューがあるんだけど、インデックス使ってくれる?」という 質問に対して 「データベースがそっちの方が効率が良いと判断したら使ってくれるし、実行計画を取ってみれば?」という 回答をしたんですが、念のため試してみます。
まず、テスト用のテーブルにデータを登録します。
INSERT INTO table1 (f1) SELECT generate_series FROM generate_series(1, 10000);
INSERT INTO table2 (f1) SELECT generate_series FROM generate_series(1, 10000);
generate_series 関数は、便利ですね。
まずお試しに単純な SQL で実行計画を取得。 もちろん事前にテーブルを Analyze しておきます。
EXPLAIN SELECT * FROM table1 WHERE f1 = 1
↓結果
Index Scan using table1_pkey on table1 (cost=0.00..8.27 rows=1 width=8)
Index Cond: (f1 = 1)
インデックス table1_pkey が使用されています。
次に副問い合わせで UNION ALL して実行計画を取得。
EXPLAIN SELECT * FROM (SELECT * FROM table1 UNION ALL SELECT * FROM table2) AS t1 WHERE f1 = 1
↓結果
Result (cost=0.00..16.54 rows=2 width=8) -> Append (cost=0.00..16.54 rows=2 width=8) -> Index Scan using table1_pkey on table1 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1) -> Index Scan using table2_pkey on table2 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1)
これもちゃんと、インデックス table1_pkey と table2_pkey が使用されています。
ちなみに UNION ALL じゃなくて UNION の場合。
EXPLAIN SELECT * FROM (SELECT * FROM table1 UNION SELECT * FROM table2) AS t1 WHERE f1 = 1
↓結果
Unique (cost=16.57..16.58 rows=2 width=8) -> Sort (cost=16.57..16.57 rows=2 width=8) Sort Key: table1.f1, table1.f2 -> Append (cost=0.00..16.56 rows=2 width=8) -> Index Scan using table1_pkey on table1 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1) -> Index Scan using table2_pkey on table2 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1)
こちらもインデックスは使ってくれます。
念のため、ビューを作成して試してみます。
CREATE VIEW view1 AS SELECT * FROM (SELECT * FROM table1 UNION ALL SELECT * FROM table2) AS t1
ビューに対して実行計画を取得。
EXPLAIN SELECT * FROM view1 WHERE f1 = 1
↓結果
Result (cost=0.00..16.54 rows=2 width=8) -> Append (cost=0.00..16.54 rows=2 width=8) -> Index Scan using table1_pkey on table1 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1) -> Index Scan using table2_pkey on table2 (cost=0.00..8.27 rows=1 width=8) Index Cond: (f1 = 1)
結果は副問い合わせと同じでした。
こういうのは、自分の手で試しておくと安心ですね。
不在票がようやく本体になりました。
今回はケースも買いました。
白い箱がケースの箱です。
ケースは透明です。
メカメカした中身が見える方が楽しいですよね。
Raspberry Pi を入れるとこんな感じです。
(中に入っているのは Rev.1 の方)
とりあえず今日はここまで。
今日は 平成 24年度秋期情報処理試験(応用情報技術者・高度試験)の合格発表日でした。 セキュリティスペシャリストに合格していたので、受験記を作成しました。
PostgreSQL には generate_series という集合を返すことができる すごい便利な関数があります。
[参考サイト]
集合を返す関数 - PostgreSQL 8.4.4文書
次のように使うことができます。
db=# SELECT * FROM generate_series(1, 5); generate_series ----------------- 1 2 3 4 5
ステップも入れられます。
db=# SELECT * FROM generate_series(1, 5, 2); generate_series ----------------- 1 3 5
TIMESTAMP 型もいけます。
db=# SELECT * FROM generate_series( db-# '2013/01/01'::TIMESTAMP, '2013/01/03', '1 day'); generate_series --------------------- 2013-01-01 00:00:00 2013-01-02 00:00:00 2013-01-03 00:00:00
FROM 句に書かない使い方もできます。
db=# SELECT generate_series(1, 3); generate_series ----------------- 1 2 3
集合を返す、というところがすごいところで 次のように別の集合と一緒に使えば 直積などの集合の演算結果を簡単に取得することができます。
db=# SELECT f1 FROM tab1; f1 ---- 1 2 3 db=# SELECT f1, generate_series(1, 3) FROM tab1; f1 | generate_series ----+----------------- 1 | 1 1 | 2 1 | 3 2 | 1 2 | 2 2 | 3 3 | 1 3 | 2 3 | 3
テストデータを作るときなどかなり役に立ちます。
12/19 に郵便局の不在票が入っていました。
前回同様、発送のメールから 7 日でした。
前回は、郵便受けに入れておいてくれたんですが 今回はケースも購入したためか 郵便局だからなのか 不在票でした。
受け取りは週末になりそうです。
前回の (1) から少し間が開きましたが、無線 LAN の続きです。
せっかく Raspberry Pi に VNC 接続できるようにしたので GUI で設定していきたいと思います。
Raspbian の デスクトップには 「WiFi Config」というアイコンがあります。 このアイコンから 無線 LAN を設定することができます。
起動すると、次のような画面が出てきます。
「Manage Network」の「Scan」ボタンをクリックします。
検出された SSID が表示されます。
自分が接続する SSID をダブルクリックします。
設定内容の入力画面が出るので入力します。
DHCP サーバがあれば、これで設定は終了です。
接続されてました。
設定は保存されるので 次は GUI を起動しなくても Raspberry Pi を起動すれば 自動的に 無線 LAN に接続されます。
前回は、 引退した iPhone4 にキーボードを装備して iPhone4 から Raspberry Pi に SSH 接続しました。 今回は、このキーボードを使って NVC 経由で Raspberry Pi を操作したいと思います。
といっても iPhone4 から 直接 VNC 接続するわけではありません。 iPhone4 にも VNC app は入れられるのですが iPhone4 の画面は小さいので iPad をモニタとして代わりに使います。
こんなイメージです。
キーボードは、iPhone4 に装備していますが、Bluetooth なので
そのまま iPad のキーボードとしても使うことができます。
(当然ながら iPhone4 は居るだけで何もしていません・・・)
このようになりました。
(iPhone4=カメラが使用中のためガラケーで撮影)
キーボードからだと タブやハイフンの入力と カーソルによる移動やコマンド履歴ができるので かなり打ちやすくなりました。
Amazon に紹介されて、『和平フレイズ ほんわかふぇ 炊飯土鍋 (二重蓋) 3合炊 HR-8382』 を購入しました。
買ったときの値段は 1995円で これで 2000円切るのは良い買い物をしたな、と思います。
炊飯器と違って、自分で火加減を調整するので、 調節が難しそうと思う人もいるかもしれませんが とりあえず説明書に書いてある通りにするだけで 美味しく炊けます。
子供の頃は文化鍋で炊いていたのですが
炊飯器を使い出してから忘れていた
米を炊くことの楽しさ、
“作業”になっていた
米を炊くことが
“料理”に戻った感じがします。
あと、炊飯器のありがたみも思い出せました。
急ぎのときや、予約したいときは炊飯器、 料理したいときは土鍋と、使い分けるのが良さそうです。
炊飯器しか使ってない人にちょっと注意かなと思うのは 蓋の裏についた水滴が土鍋の中に入ってきます。 炊飯器だと、この辺りは別のところに逃げるようになっていますが この土鍋にはそんな仕組みはないので 炊けた米を土鍋の中に入れっぱなしで蓋をしておくと、 底の方の米が水っぽくなってしまいます。
あと、昔からのオマジナイ?ですが、 火を消す前に 10〜20 秒程度強火にしてから消します。 こうするとしっかり炊き上がります。
今日も美味しく炊けました。
引退した iPhone4 にキーボードを装備したので このキーボードを使って Raspberry Pi を操作したいと思います。
Raspberry Pi には SSH 接続します。
というのも、Raspberry Pi の VNC Server を止めてしまうと Raspberry Pi を操作する手段が 無くなってしまうためです。
SSH 接続は、無料の『SolarWinds Mobile Admin Client』を使います。 快適にサクサク、というわけにはいきませんが、 VNC Server の起動や シャットダウンくらいなら問題ありません。
[参考サイト]
iPad/iPhoneからフリーでSSHを使う | TECHoh!
さっそく接続してみます。
コマンドを実行。
ちゃんと色もついて表示されます。
ただ、キーボードのタブ、コントロール、カーソルキーは 反応しませんでした。 ちょっと残念ですが タブやコントロールキーが必要なときは 画面上部の [tab],[ctrl] などの操作アイコンを使います。
ちなみに、外付けキーボードが無く 横長モードで、キーボードを表示すると かなり画面が狭くなります。
この辺りは、キーボードが別にあることのメリットですね。
画面上部 [ctrl] などの操作アイコンは 表示・非表示を切り替えできるので 更に広く使うこともできます。
無料でここまでできるのはありがたいですね。
引退した iPhone4 を何か便利に使いたいと思って 『iBUFFALO iPhone 4S/iPhone 4両対応 Bluetooth2.0対応 コンパクトキーボード ケース一体型 バックライト搭載 BSKBB12BK』 を購入しました。
iPhone5 が出たためか iPhone4/4S 用のこのキーボードは かなり値下げされて 約 2000 円で買うことができました。
まず、重いです。コンパクトな分、重量感はかなりあります。
ただ、この重量感がたまらない「ずっしりとした重さ」なのです。 キーボードをスライドさせるときの動きも、「カシャーン」という感じで これまたよくツボを押さえているな、と思います。
バックライトが付くので、暗いところでもキーボードが見えます。 キーで音楽や動画の再生などの操作ができるのも便利です。
なにより、カーソルキーが付いているので 細かい文字間の移動も簡単で、 このての作業(「」だけ打って、間に文字を入れるとか)は iPhone4 の小さな画面では大変なので すごくありがたいです。
まだもう少し iPhone4 に頑張ってもらうことになりそうです。
せっかく Raspberry Pi が NVC 接続できるようになったので iPad とつなげてみます。
iPad 側の VNC app は、『Mocha VNC Lite』(無料) を使います。 Mocha VNC Lite には、制限事項もありますが、無料なのでお試しするには丁度良い app です。
[参考サイト]
iPhoneとiPad用VNCアプリ17種類まとめ :: 実践CMS*IA
まず設定画面で SVN Server の IPアドレス、ポート、パスワードを指定します。
接続。
接続できました。
コンソールでコマンドを入力してみます。
良い感じです。
これで Raspberry Pi と iPad だけで作業できるようになりました。
無線 LAN の設定の途中なんですが Raspberry Pi に VNC Server を入れて PC から Raspberry Pi の X の画面の キャプチャーを取れるようにしたいと思います。
以下のサイトを参考に作業開始。
[参考サイト]
工作と小物のがらくた部屋: Raspberry Pi に VNC Server をインストール
インストール。
$ sudo apt-get install tightvncserver
インストールしたパッケージを起動。 パスワードを設定します。
$ tightvncserver
もうこれで VNC Server が使用できます。
ポートが LISTEN されています。
$ netstat -lnt Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN
1 つ目は 5901 です。
VNC Server を止めてみます。
$ vncserver -kill :1
ポートの LISTEN (5901, 6001) が無くなりました。
$ netstat -lnt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
もう 1度 VNC Server を起動します。
$ vncserver :1 -geometry 1024x768 -depth 24
次は PC 側です。
PC 側は、Windows で UltraVNC を使います。
[参考サイト]
窓の杜 - 【REVIEW】Windows向けに最適化された「VNC」互換のPCリモート操作ソフト「UltraVNC」
バッチリ接続できました。
2 年ほど Softbank の iPhone4を使っていたんですが 先日、前に使っていたガラケーに戻しました。 その時の話です。 もしかすると参考になる人がいるかもしれないので 書いておきます。
ガラケーに戻した理由は「通話がしにくい」というのもありますが 一番の理由は「パケット放題が必要なほどデータ通信をしない」ためです。
Softbank の iPhone4 の料金プランは、パケット放題が必須です。 パケット放題は、料金固定の「パケット放題フラット」と 下限のある「パケット放題 for スマートフォン」がありました。 2 年縛りの契約にすると、「パケット放題 for スマートフォン」の上限金額が 「パケット放題フラット」と同じになるため、 あまり使わない身としては、当然「パケット放題 for スマートフォン」に 入っていました。
購入当時は、データ通信を使っていた月もあったのですが 基本生活圏に Wi-Fi があり 家でも会社でも目の前に PC があるため、 通信料もパケット放題の下限に収まっていました。
さらに本体を買う時に、本体の金額を全額払ったため 2 年間、本体分の割引が適用されていました。 そのため、パケット放題が相殺されて、 毎月 基本料(934円)+ユニバーサルサービス料(3円)くらいを支払っていました。 (基本料等は、割引されません)
2 年経って 本体分の割引がなくなると パケット放題の料金も乗ってくるため、 そろそろ潮時と考えてガラケーに戻すことにしました。
ガラケー(Softbank ショップの人もそう呼んでいた)は iPhone4 に使っていたものです。 そのまま残してあったので、充電して Softbank ショップに持って行きました。
Softbank ショップで聞いたところ、これは「持ち込みによる機種変」になるそうです。 残念ながら、最初に行った Softbank ショップには、前のガラケーに使える SIM カードの 在庫がなく(新品用のものしかないとのこと)、変更することができませんでした。
事前に「持ち込みによる機種変をしたいけど、(機種名)の SIM カードの在庫はありますか?」と 電話で聞いておくのが良いそうです。
2 件目の店(電話で確認済み)では、あっさりと変更することができました。 SIM カードの再発行手数料 1900 円が、次の電話料金の支払いに加算されます。
2 年縛りの契約の場合、更新月の 1ヶ月以外は違約金(9,975円)が発生します。 2 年と 2 ヶ月経っていたため、違約金が発生するかな?と思っていたのですが、 ホワイトプランにも「ホワイトプラン R」という 2年縛りのプランがあり そちらに移行することで違約金は不要、ということになりました。 (これが公式ルールなのかはわかりません)
それと iPhone4 に挿してあった SIM カードの返却は求められませんでした。 iOS のバージョンアップ等で必要になるそうなので ちょっと心配していたのですが良かったです。
今は GPS 付きの iPod Touch として新しい人生を歩んでいます。
今日、RS Online に注文していた 2台目の Raspberry Pi の発送メールが 来ました。
メモリ 512M で Revision2 です。
ちなみに今回は、次のような流れでした。
最近の CentOS や Fedora を入れると ネットワークのインターフェース名が eth0 とかではなく em1 みたいな名前になってしまうことがあるそうです。
em というのは ethernet-on-motherboard の略のようです。
これは biosdevname という NIC と インターフェースの対応を固定化するための 仕組みだそうで、 CentOS では、NIC(の MAC アドレス)が変わると ethX の X が変わってしまうため それを固定化するために 1段階抽象化しているようです。
[参考サイト]
ALL about Linux: CentOS 6.0 で NIC と ethX の対応を固定化する
上記サイトによると DELL のマシンは biosdevname が ON になっているため ethX ではなく emX となったようです。
RHEL も同様で、機能の有効・無効化について書いてありました。
Raspberry Pi に USB の無線 LAN アダプタを接続します。
昔、3 つくらいまとめて買った PLANEX の GW-USValue-EZ が 余っていたので それを使います。
2012-09-18-wheezy-raspbian のイメージは 何もしなくても GW-USValue-EZ を認識できるようです。
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n ...
USB ポートに挿すだけで GW-USValue-EZ を認識しました。
ifconfig を見ると、新しいインターフェースが追加されています。
$ ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 00:22:cf:44:XX:XX
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
インターフェースは wlan0 という名前になります。
追加されたインターフェース(GW-USValue-EZ)から見える アクセスポイントを確認してみます。
$ iwlist wlan0 scan
wlan0 Scan completed :
Cell 01 - Address: 10:6F:3F:XX:XX:XX
ESSID:"45365416543FJELGG"
(省略)
Cell 02 - Address: 00:18:84:XX:XX:XX
ESSID:"FON_FREE_INTERNET"
(省略)
アクセスポイントが周囲にあれば、ずらっと表示されます。
今回はここまで。