PostgreSQLの最近のブログ記事

select
case
when hoge = 1 then '1でした'
when hoge = 2 then '2でした'
end as hogecase from hogetable

わかりにくい例ですが、case~endがまぁcaseブロック、when以降が条件、then以降が結果ですね。コレをしらないと、ロジック側でループさせながらぐりぐり判定させないといけないのですが、知っていることによって大幅にロジックを減らせます。

SQLServerやPostgreSQL限定ではなく、SQL-92に載っている手法なので、他のDBでも利用可能です。知っておくべき、活用すべきでしょう。

クエリの実行時間の計測

| | コメント(0)


¥timing

と叩くと、
「Timing is on.」
と表示され、以降クエリを実行するたびにその実行時間が表示される。

「Time: 3.996 ms」

こんな風に表示されると、explainでコストを計測するより分かりやすいような気がします。

もう一度¥timingを叩くと、オフになります。

クエリ結果のファイル出力

| | コメント(0)

psqlのオプションで
-o filenameをつけると、結果をすべてファイルに出力してくれます。

psql -U ユーザ名 -c 'SELECT * FROM HOGE;' -o 'hoge.txt';

これで、問い合わせ結果はhoge.txtに書き出されます。
が、postgresが書き込みのできるディレクトリでないと書き込みエラーが出ます。

継続月数の取得

| | コメント(0)
select to_char(age(date('2007-1-1'),date('2005-9-6')),'MM' )::int + to_char(age(date('2007-1-1'),date('2005-9-6')),'YYYY' )::int * 12 as date_m;

OracleでいうところのMONTHS_BETWEENですね。
何ヶ月継続、なんていうデータ抜きたいときに使えるかと。

8.1.4で動作、他のバージョンは未確認

バックアップ

pg_dump -U 【DBオーナ名】-f 【出力先パス】 【DB名】

レストア

psql -U 【DBオーナ名】【DB名】 < 【ダンプファイルのパス】

何もないトコにレストアするなら、ユーザとDBを先に作成しておいて、そこにレストアする。

バックアップファイルって言っても、構成やデータをテキストファイルに書き出しているだけ。

まぁ、おかげで加工はしやすいし、内容の把握もしやすいです。

PostgreSQLのNULL判定

| | コメント(0)

select coalesce(カラム名, '0');

指定したカラムがNULLだったら「0」が返って来る。

select coalesce(カラム名その1, カラムその2名,'0');

「カラム名その1」がNULLだったら「カラムその2」の値を使う。「カラムその2」がNULLだったら「0」を返す。


「ISNULL」はポスグレにはないらしい。

SELECT EXTRACT(YEARS FROM AGE(TO_DATE(文字列格納カラム,'YYYYMMDD'))) AS USER_AGE FROM テーブル名;
select attname from pg_attribute where attrelid = (select oid from pg_class where relname = 'テーブル名') and attnum > 0 and atttypid > 0;
SELECT * FROM PG_TABLES;

もちろんWHERE条件を加えて絞り込むことも可能。まずは一覧を表示してみればどういう情報が出力されるのかわかる。

\d

でも十分なんですけどね。

このアーカイブについて

このページには、過去に書かれたブログ記事のうちPostgreSQLカテゴリに属しているものが含まれています。

前のカテゴリはPHPです。

次のカテゴリはRubyOnRailsです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。