今回、ロールを作る前に同じ名前のユーザーアカウントをLinuxに作った。いうのをIdent認証というらしい。Linuxのアカウントと関係なくロールを作る方法もあると思うので、いずれ調べたい。ディレクトリにpostgresql-<3文字の曜日>.logという形式のファイル名に記録される。曜日はPostgreSQLを起動した曜日。ログの内容にその事象が発生した日時が記載されない。#ファイル名といい日時が記載されないことといい、変なデフォルト設定だな。削除し、下記のように書き換えた。設定を再読み込みすると、ログに日時が記録されるようになる。2015列の値を使って日時に「+n日」するテーブルtblにtimestamp型の列dtと文字列型の列nがある。nは文字列型だけど入ってる値は"1"とか"12"のような数字のみからなる文字列。nの値を使って「dt+n日」という計算をしたい。最初、以下のようにしたが構文エラーになった。tbl次のようにしたら欲しい結果が得られた。tblもしnが整数型ならこうかな。以前の記事ではPL/pgSQLの使いみちと使い方を書いていなかった。PL/pgSQLは関数の定義に使う。実行は関数として実行する。関数はSELECT文で実行する。下記のように、FROMがなくてもエラーにならない。<関数名>OracleのPL/SQLはコードをファイルに保存しファイルを指定して実行することができたと思うが、PL/pgSQLはそういうことができない。関数を記述して関数として実行するしかない。その点はPL/SQLより不便な気がする。以前の記事ではデータを検索する例だけだったので、データを変更するコードを示す。戻り値は挿入した件数である。plpgsql;17~19行目で最後までフェッチしたら終了するようにしている。この部分がないと無限ループになる可能性がある。#この関数の場合はINSERT文でSQLエラーになり止まる。2014PostgreSQLの文字列のエスケープSQLの文字列リテラルはシングルクォートで囲われた文字の並びである。文字列リテラルの中にシングルクォートを入れたい場合、PostgreSQLではシングルクォートを続けて2つ書くことで文字列リテラル中にシングルクォートを記述できる。書くことによって、C言語の文字列リテラルのようにバックスラッシュでエスケープ文字として使用できる。制御文字も記述できる。既存のWEBアプリケーションに対して国際化対応というか現地時間対応みたいなことをする可能性が浮上してきた。型(以下、TZありと記述)にキャストしたらどうなるか、やってみたメモ。キャストの書き方は、標準SQLで書くと長いのでPostgreSQLの方言で記述。行)どうやらTZなしをTZありにキャストするとDBに設定されたタイムゾーンの時間となるらしい。15:00-0700(PDT)という風に変換される。#上に書いた3つの時間はすべて同じ時間。表現の仕方はタイムゾーンの数だけある。WEBアプリケーションの現地時間対応をもしするとしたら、テーブルのTZなしのカラムをTZありに変更し、合わせてコードも修正するのがまともなやり方なんだろう。そんな工数は取れないだろうから、SQL文のいろんなところにキャストを入れる「なんちゃって国際化」になりそうな気がする。2014PL/pgSQLPL/pgSQLはPostgreSQLで使える手続き型言語である。OracleにおけるPL/SQLに当たる。PL/pgSQLはPL/SQLを参考に実装したらしい。PL/pgSQLの構造は下記のようなブロック構造になっている。