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のカードです。