PostgreSQL:「pg_stat_statements」がちょっと便利になってた件

 

 前回の記事の最後でPostgreSQL10にしたい、的なことをぼやいたおかげか、先日から、ようやく社内でもPostgreSQL10の対応がはじまりました。
 まあそんなに問題も発生せず無事に終わりそうなんですが、性能検証しているときに、PostgreSQLではお馴染みの「pg_stat_statements」を使ってスロークエリを探したりしてたんですね。こいつは、クエリの実行回数やかかった時間などを記録した内容を見せてくれるビューなので、性能検証などで処理が遅い部分などを調べていくときには、とてもお世話になっております。

 で、10にしてはじめて知ったんですが……実はいつの間にか、pg_stat_statementsビューのカラムが追加されてたんですよ。「min_time」「max_time」「mean_time」の3つで、それぞれ名前の通り、そのクエリの実行にかかった「最少時間」「最大時間」「平均時間」を記録してくれます。それまで使ってたVersionで記録してくれる時間は「total_time / 合計時間」だけだったので、微妙に使いにくかったんですよね。こういう追加は助かります。

SELECT
   query
  ,calls
  ,(mean_time / 1000)::numeric(7,3) AS avg_time_sec
  ,(min_time / 1000)::numeric(7,3) AS min_time_sec
  ,(max_time / 1000)::numeric(7,3) AS max_time_sec
FROM
   pg_stat_statements
–WHERE
—   (max_time / 1000) > 3

ORDER BY
   max_time_sec DESC
LIMIT 20;

※情報をリセットする場合
 SELECT pg_stat_statements_reset();

image

 こんな感じで使ってます。各時間はミリ秒単位になってるので、僕は1000で割って秒単位に変換してから見ています。検索条件次第で、解析の幅が少し広がりますね。

 調べてみたら9.5から追加されてたようです。これまではずっと9.4を使ってたので、もっと早くバージョンアップさせたかったなぁ……と思いました。いうほど大したものでもないんですけど、地味に便利になりました。この記事が、まだ9.4以前をお使いの方へのバージョンアップの一助になれば……。

広告

PostgreSQL:複数定義があるFunctionの一覧をクエリで取得する

 

 お仕事で作ってるシステムでPostgreSQLを使っておりまして、その際のTIPSというか個人的な覚書というか、そんなことも今後はブログに書いておこうかなと。で、今回のお題はタイトル通りです。(※タイトル少し変だったので修正しました)

◆背景

 今、仕事で担当しているシステムでの話ですが、DB側に作っているFunctionが、とっっっっっっっっっっっても!多くて!!
 数多すぎてまともに管理できておらず、しかも仕様変更も多くて、引数が増えたり減ったりがザラにあります。20個以上の引数が必要なFunctionに引数追加させられて、でも数日後に削除させられたときはキレかけました。そんなことばっかりやっているため、古い引数定義のFunctionを消し忘れているという事態がチーム内で多発しました。
 で、PG側の修正が洩れていたときに、古い定義がちゃんと消してあればエラーになるからいいんですけど、消し忘れているとエラーにならないため、一見正常に動いているように見えるけど実は……ということがいっぱいありまして。

 そのため、定期的に自動で複数定義あるFunction一覧を取得してチェックしたい、という要望があって作りました。pgAdmin等でFunctionの一覧見ればすぐわかることではありますが、自動化させるためにクエリで取ることに。

 そもそもちゃんとした管理体制とか用意すべきなんですが、まずは応急措置的な感じとして。

 

◆クエリ

 こんな感じ。
(動作環境:PostgreSQL 9.4/Windows版)

SELECT
   main.proname AS function_name
  ,main.proargnames AS parameters
  ,FORMAT_TYPE(main.prorettype, NULL) AS return_type
  ,ROW_NUMBER() OVER(PARTITION BY main.proname ORDER BY main.proname ASC, main.proargnames ASC) AS overlap_count
FROM
   pg_catalog.pg_proc main
INNER JOIN (
             SELECT
                chk.proname
             FROM
                pg_catalog.pg_proc chk
             INNER JOIN pg_namespace nms
                     ON chk.pronamespace = nms.oid

—             INNER JOIN pg_catalog.pg_user usr
—                     ON chk.proowner = usr.usesysid

             WHERE
                nms.nspname = ‘スキーマ名’

—             WHERE
—                usr.usename = ‘オーナーのユーザー名’

             GROUP BY
                chk.proname
             HAVING
                COUNT(1) > 1
           ) cnt
        ON main.proname = cnt.proname
ORDER BY
   main.proname
  ,main.proargnames
;

 このクエリで、スキーマ名やらユーザー名やらで対象範囲を絞って、取得した結果が1件以上あるときは消し忘れがある、という判定で使っています。範囲の絞り込みはクエリを少しいじれば(コメントアウト部分のあたりとか)、ある程度は融通が効きますね。

 

 別に特殊なことをしているわけではありませんが、今後またどっかで使うかもしれないので。使いたい方がいらっしゃったら、自己責任ですがどうぞご自由に~。

 

 

余談:なんでもいいけど、そろそろPostgreSQL10にバージョンアップしたい。したくない?

HTC U12+の「スマートディスプレイ」

 

 前回の記事に書き忘れたんですが、HTC U12+にある「スマートディスプレイ」なる機能が結構便利で気に入っているので、追って紹介しときたいと思います。

 

 スマートディスプレイ機能は、端末のロック時など消灯時に端末を持ち上げたりすると、それを感知してディスプレイに時計と通知アイコン等を表示してくれる機能です。↓みたいな感じに。

image

 

 過去に、Lumiaで同じような機能があって結構気に入ってたので、これがU12+でも使えるのは思わぬ喜びでした。

 

 この機能は、表示する時計のデザインや表示方法などを設定から変更することが可能です。

 

image image

 時計のデザインは全8種類です。数が豊富というわけではありませんが、いくつか用意されているのはありがたいところ。

 

 

 image

 他にも表示設定に関しては、端末を持ち上げたときに表示させるようにする「モーション起動」(デフォはON)だったり、逆に常に表示させたり、あるいはスケジュールで設定した時間の間だけ常にオンにしたり、とある程度の融通をきかせてくれています。
 モーション起動をオンにしておけば、鞄やポケットから取り出したときにオンになったり、机の上で裏向きから表向きにしたときなどにもオンになったりと、何かと便利です。ちなみに表示は15秒くらいで自動的に消えるようになっています。

 

image

 

 私は上記のデザインで使ってます。時計はなんとなく、アナログ式の表示のほうがパッと見でわかりやすいので……。時計だけじゃなく通知アイコンも表示してくれます。Lumiaでは表示するアイコンを選んでそれだけが出てくる状態でしたが、こちらは、通知バーに出ているものがそのまま出てきているようですね。

 地味ながらも便利な機能で、気に入っています。こういう細かい部分で気が利いてると思える機能は、素直に評価ですね。大事に使っていきます。

HTC U12+ を購入しました

image

 久しぶりに端末を購入したので、感想でも書いていこうかな、と。

 私も今ではメイン機はAndroidとなりました。去年にファーウェイの「P10 lite」を購入して使っていたのですが、コスパがいいとはいえど最近は性能的に物足りなくなってきたので買い替えを検討していたところに、先月に国内で発売となったHTCの「U12+」に乗り換えることにしました。

 HTC U12+を選んだ理由ですが、私が買い替える端末を探していたときの条件が複数あり、

・高スペックであること(3Dゲームを行う端末にする予定のため)
・ノッチが無いこと(個人的にノッチが嫌いなので)
・国内SIMフリーとして正式に取り扱いがあること
・Android8.0以上であること

 などでした。他に、妥協した条件としては「イヤフォンジャックがあること」というものがありましたが、これも含めると一気に選択肢が狭く……というか実質無い状態でしたので……。
 昨今はノッチ付きがトレンドになっており、「ノッチ以外は条件を満たしているのに」という端末が数多くありました。そんな中で、HTCが国内投入した「U12+」は、現状で僕にとってベター寄りのベストな選択肢でした。ただしお値段9万円以上(税込でほぼ10万円!!)という超高額端末でしたので、長く大事に使っていこうと思います。

 

 

◆基本スペック

 まずは軽く、基本スペックを確認しておきます。詳細は公式サイトをご確認ください

OS Android 8.0 Oreoベース
CPU Snapdragon 845
メモリ 6GB
ストレージ 128GB + microSD(SIMスロット2の排他)
画面 6インチ スーパーLCD
Quad HD+ (2880 x 1440)、18:9
端末サイズ 高さ:15.6mm
幅:73.9mm
厚さ:8.7mm~9.7mm(含カメラ高)
重量:188g
カラー トランスルーセント ブルー(一部に透過あり)
フレーム レッド
セラミック ブラック
カメラ 背面:12Mピクセル広角カメラ + 16Mピクセル望遠カメラ のデュアルカメラ
表面:8Mピクセル x 2 のデュアルカメラ
バッテリー 3500mAh、高速充電対応(Quick Charge 4.0、Power Delivery 3.0)
その他 イヤフォンジャックなし、USB Type-C、nanoSIM、感圧式ボタン
 
 以下は画像が多めなので、記事分割しておきます。
 

続きを読む

ブログ更新を再開しようと思います。

 ご無沙汰しております、OD-10Zです。

 まずは、長らくブログを放置(更新停止)しており、大変失礼しました。Twitter上( @od_10z )では色々と言っていたのですがこちらは完全放置でした。タイトルの通り、一年ぶりくらいに更新再開してこーと思ったのですが、その前にまずは、ブログ更新停止していた経緯と、今後このブログをどうしていくかについてを簡単に書いておきたいと思います。

 

◆ブログ更新停止の経緯

 一言で言えば「W10Mを諦めた」からです。(何をいまさら感があるかもしれませんが…)
 あれほど諦めないって言ってたのに、あっさり手のひらを返してしまい、申し訳ありませんでした。

 直接的なキッカケになったのは、丁度一年前に、ワケあってAndroid版やiOS版のMS純正アプリを使い込む機会があり、そちらのMSのやる気の高さを見て、MSのやる気の差を実感してしまったことです。その当時に私がW10Mや純正アプリに感じていた不満点や使いにくい点など、その多くがAndroid版ではほとんど解決されていたりとかが多く。
 今になって去年の自分の記事を見ていても、節々に見られるMSへの疑心が、確信へと至り、一気にやる気を失ってしまった……と、いった感じです。
(※そうなるんじゃないかな、と思ってそれまで頑なに、iOSやAndroidをメインで使わないようにしていたんですけど。これは単に自分の視野を狭めるだけでしたね。反省)

 

 それから少しした頃に、皆さんもご存知のように、MSのジョー(Joe Belfiore)氏によってTwitter上で「今後W10Mに関しては新機能を追加しない」という、事実上のW10M終了宣言も出てしまいました。やる気を完全に失っていたこともあって、そのままブログ放置してしまってました。

 その後、放置したまんまもなんだかなー、と思って何度かここを閉鎖しようか、と考えたりはしましたた。ですが結局、踏み切れず、そうこうしているうちに今日に至り……。

 

◆今後の更新方針

 まず、今後このブログではW10Mに関しては特に触れません。
 後継OSやSurfacePhoneなどが出てきたときに話題にはするかもしれませんが、その程度です。そういった情報を求めて今まで本ブログを見て頂いてくれてた皆さんには申し訳ありませんが……。
 「じゃあ今後どうするのか」、「そもそも何で再開するん?」というと……実ははっきりとした方向性は無いです。ただ、再開しようと思ったきっかけは単に、「雑記でもなんでもいいから、何かしらアウトプットする癖をつけておきたい」と思ったからです。ただでさえアウトプットが下手なので、意識して継続的に練習しておかないと、もっとひどいことになりそうですから。

 ひとまずは仕事や趣味でのPG書いてるときの備忘録を兼ねた記事とか、今後自分が購入する端末(PCやAndroid機等)の感想記事とか、ふつーに日々の雑記(ゲームの話題等)とか、そんな感じになるんじゃないかなぁと思ってます。要はWP/W10Mに限定したブログでは無くなるというだけの話です。

 更新頻度も過去ほど高くないと思います。
 ここを完全に消したうえで別のブログを作ることも考えたのですが、悩んだ末、残したうえで、ここでそのまま続けることにしました。

 

 

◆その他

 重ね重ねになりますが、今までW10Mに関する情報を求めてここを見ていてくださった方々には、本当に申し訳ありません。過去記事は今後も残したままですが、一度全部のタグ等を外してしまったため、後ほど再整理しておきます。

 思い返してみれば、このブログも開設当初はWindows Mobileの「IS02 / T-01B」のブロガー向けイベントに参加したかったがために開設したところから始まっており、そのまま惰性で続けているうちに自作アプリの紹介などを書いてました。そこからWindows Phoneへの乗り換えがあり、途中からはWP/W10Mに関するニュース的な話題やTIPS的なことを書いて……と、これまでも散々迷走していた感がありますね。
 今後もますます迷走していくことになりそうです。ご容赦願います。

 

 あと、気付いていた方もいらっしゃりそうですが、少し前からブログのレイアウトをいじったりタイトルを変えたりしていました。今後は今のブログタイトル「コノ世界ニ非ズ」としてやっていきます。今回もタイトルの元ネタはMTGのカードです。

Windows 10 Mobile Insider Preview 15240.0 公開開始。絵文字の追加&更新、とバグフィックス。

wp_ss_20170810_0002 image

 日本時間で8/10より、Insider Previewの最新版である「15240.0」が、Fast Ring向けに公開開始されました。更新内容は公式ブログで確認できます。

 

 今回の更新では特に新機能はありませんが、絵文字が一部、追加/更新されています。

◆新規追加された絵文字

image

 

◆更新された絵文字

更新前↓
image

更新後↓
image

※絵文字の画像は公式ブログから引用

 

 また、Outlookカレンダーの説明が記事内にありますが、これは多分新機能ではなく、ただの操作説明です。(中国語の旧暦表示に関する説明と思われます。更新前のバージョンや通常版のバージョンでも普通に出来ますね)

 

 バグフィックスとして、
  ・SDカードにインストールされているアプリの更新時に、エラーコード「8007000B」が表示される問題
  ・通知でWindows Updateのアイコンが表示されない
 という問題が解消されたようです。
 アプリ更新時に表示されるエラーコードが「80070057」となる場合はまだ未解決であり、またHP Elite x3での優先Continuum接続時の不具合(画面向きが保存されない)も未解決のままです。

 

 7月に、Fall Creators Update向けとしては最後のBug Bashが行われており、Mobile向けの更新はほぼゼロと悲観的に思われていましたが、Bag Bashが終わってからのほうがMobile向けには更新が活発になった気がします。(活発、とは言いすぎですが)
 海外サイトなどをご覧になってる方はご存知でしょうが、この夏には「ビジネス向けの更新」があると、まことしやかに噂されています。ここ最近の更新がもしかしたらそれなのかもしれません。しかし、正直に言ってしまえば大した更新ではありません。ようやく追加された新機能の「Continuum接続時に画面向きが変更できるようになった」というものだって、それだけ?感が否めないですし。
 ビジネス向け、と最初に聞いた真っ先に思ったのが「Continuum接続時のマルチウィンドウ対応」なんですが、さてはて……。

 まだ今後に機能追加の更新が予定されているのか、それともただの噂で終わるのか。MSのやる気を確かめるためにも、実に気になるところです。

8月の月例アップデート

 8/9より、月例アップデートが配信開始されました。月例アップデートなので基本的にはバグ修正がメインで、新機能の追加はありません。

 

1.バージョン1703 - Creators Update端末向け「10.0.15063.540」

wp_ss_20170809_0002 image

 

2.バージョン1607 - Anniversary Update端末向け「10.0.14393.1593」

wp_ss_20170809_0001 image

 

 更新内容は公式サイト(1703の更新内容1607の更新内容)にて確認可能です。現時点ではまだ英語版しか存在しませんが、近々に日本語版も掲載されるものと思われます。

 今回もVAIO Phone BizはCreators Updateを受け取れませんでした。SDカードの問題などは先月時点で解決しているはずなので、まだ様子見しているとは思い難い状況ですが……もしかしてVAIOが単に忘れているだけでは

TIPS:W10Mの休日カレンダーに、「山の日」などの新しい祝日が登録されていない場合

 今年は久しぶりにまともな夏休みが取れそうだったので、ウキウキで予定表を追加していたときに、ふと気付いたことがあります。あるはずの休日が……8/11の「山の日」が休日カレンダーに登録されていない、と。

wp_ss_20170806_0006 (1)

 

 私の休日カレンダーは、時期はうろ覚えですが数年前から、WEB上のOutlook.comのカレンダーに「日本の休日」カレンダーを登録しておいたのですが、山の日のような新しい休日は、勝手に追加されてくれませんでした。んー。
 少し調べてみると、この問題は以前からOutlook.comのカレンダーに休日を追加していた人で、かつ、自動移行が何らかの理由で失敗している人に発生しているっぽいです。(本来なら新しい休日カレンダーのデータに自動移行するはずのようです)

 

 解決方法は2つあります。

 

1.「日本の休日」カレンダーを、アプリ上で表示するように追加する

 カレンダーの左上にあるハンバーガーメニューを押して、「予定表の追加」を押します。

image

 

 休日カレンダーとして、国の一覧がずらーっと表示されます。
 一番下までスクロールすると「日本」がありますので選択します。選択すると右側にチェックマークが付きますので、それを確認したら戻るボタンを押します。

image

 

 すると、「休日カレンダー」というグループができてそこに日本が表示されます。カレンダーに戻ると、ちゃんと「山の日」が出てくるようになりました。あとは、古いほうのカレンダーを消しておけばOKですね。

image image

 

2.「日本の休日」カレンダーを、Outlook.com上で追加する

 PCからさくっと直せるので、こっちのほうが楽です。WEBブラウザを起動して、Outlook.comにアクセスします。ログインしてカレンダーを表示したら、「予定表の追加」ボタンを押します。
 メニューから「休日の予定表」を選択します。

image

 

 画面右側に国の一覧が出てきますので、一番下までスクロールし、「日本」を選択します。選択したら画面上部にある「保存」ボタンを押します。

image

 

 すると予定表に新しく「日本 の休日」が追加されます。この内容がW10Mにも自動同期されますので、W10M側で確認すればそちらにも「日本 の休日」が追加されていることが確認できます。

image ←Outlook.comのカレンダー

image ←W10Mのカレンダー

 

 

 どちらの方法でも問題ないです。山の日などの新しい祝日がカレンダーに登録されていない方は、是非試してみてください。それでは皆さんもよい夏休みを!!

TIPS:Windows 10 Mobile端末で、緊急警報(緊急地震速報など)の設定を確認する

 これを書いている数日前に、関東地方で久々に大き目の地震があったためか、最近このブログに「w10m 緊急地震速報」などの検索ワードで訪れる方が増えてきました。過去に紹介記事は書いていたのですが、改めて、設定方法やどのようなものなのかなどをここにまとめておきます。

 尚、大前提として、「端末に有効なSIMカードが刺さっていること」「端末が対応機種であること」が必要です。

 

◆緊急警報の受信設定を確認する

 Windows 10 Mobileの設定画面から確認していきます。
 設定 > システム > メッセージング を開きます。

image image

 

 表示された画面でSIMカードを選択します。

image
(端末に入れているSIMカードの、電話番号下4桁が表示されているはずです。尚、データ通信専用SIMでも一応、電話番号は割り振られているため、データ通信専用SIMでも4桁が表示されます)

 

 

 画面の下のほうに、「緊急警報の設定の変更」というメニューがありますので、これを選択します。尚、端末が対応していない場合はこの表示が出てきません。

image ←対応機種の場合

image ←非対応機種の場合

 

 

 緊急警報を受信するかどうかの設定画面は下図の通りです。
 これがオンになっていれば受信します。

wp_ss_20170806_0003 (1)

 

 

◆受信した場合はどのようになるのか

 緊急警報を受信した場合、下図のように端末に表示されます。尚、緊急警報はその仕組み上、発令圏内にいたとしても必ず受信するわけではないのでご注意ください。

wp_ss_20160516_0001

 

 また、現時点(2017/08/06)の仕様では、受信時の警報音は鳴らず、通常のSMS受信時と同じ音しかなりません。なので、無いよりはマシかもしれませんが、事実上あてにならないので注意してください。

Windwos 10 Mobile Insider Preview、Fast Ring向け「15237.0」と、Release Preview向け「15063.502」が公開中

 少し出遅れたので、一気に2つ分。

 

◆1.Fast Ring向け「152370.」……バグフィックスのみ

wp_ss_20170803_0001 image

 日本時間で8/3のAM7時くらいから、Fast Ring向けに「15237.0」の公開がはじまっています。詳細はいつも通り公式ブログで確認できますが、今回はMobile向けには特に新機能は無く、バグフィックスに収まっています。

 バグ修正の中では、最近のビルドから発生していた、カメラ起動時や画面向き変更時に少し真っ暗な画面になることがある問題の修正、HP Elite x3でSDカードが抜けたと誤認識される問題の修正、などが含まれています。
 SDカードの件は、私の場合はInsider Previewでは発生しておらず、また7月の月例アップデート以降発生しなくなっていたのですが、まだ発生していた人にとっては助かる修正となりそうです。

 既知の不具合としては前回同様、HP Elite x3で有線でのContinuum接続時に画面回転向きを保存してくれない問題、SDカードにアプリをインストールしていると更新時にエラーになる問題、アプリ更新時に失敗する問題があります。
 特に、SDカードにアプリをインストールしている場合に更新に失敗する(エラーコード:8007000B)と、アプリの更新時に失敗する(エラーコード:80070057)については、フィードバックHubを見ていると、遭遇している人が多いようです。
 前者の場合は、アプリを一度本体に移動させてから更新し、その後SDカードに戻すという回避策が。後者の場合は一度古いバージョンのアプリをアンインストールするという回避策がそれぞれ案内されていますので、現象に遭遇している方は試してみましょう。以下に、その手順を説明しておきます。

 

【アプリを移動する手順】

 設定 > アプリ > アプリと機能
 を開くと、インストールされているアプリ一覧が表示されます。フィルターをかけることで、インストール先を絞り込むことが可能です。今回の場合、SDカードにインストールされているアプリを探したいので、「SDカード(D:)」を選択しましょう。

image wp_ss_20170806_0003

 

 次に、移動させたいアプリを選択します。
 選択すると「移動」というボタンが表示されますので、これを選択します。移動先を聞かれるので、「このデバイス」を選択し、移動ボタンを押します。

image image

 

 ボタンを押したあと、「移動中…」というステップが終われば本体に移動完了です。そしたら、ストアを起動してアプリの更新を済ませましょう。

 尚、本体からSDカードへ戻す場合も、手順は一緒です。フィルターを「このデバイス」にして本体のアプリ一覧から目的のアプリを探し出し、移動ボタンを押します。移動先の選択肢で今度は「SDカード」を選ぶだけです。

image

 

 毎回これをやるのは面倒くさいですので、早く修正されてほしいところですね。

 

 

 

◆2.Release Preview向け「15063.502」

wp_ss_20170802_0001 image

 日本時間で8/2ごろから、Release Preview向けに「15063.502」の配信がはじまっています。こちらはいつも通り、バグフィックス中心となっています。更新内容はコチラで公開されています。この内容は8月の月例更新にて正式版にも含まれる内容になる予定です。
 配信されてから少し時間が経っているため日本語訳済みなので、確認も簡単ですね。基本的にはPC向けとしての情報しか記載されていませんが……。

 尚、8月の月例更新は、日本時間だと今週の水曜日、8/9の予定です。備えよう。