アーカイブ
-
[pgAdminIII]サーバ情報のバックアップ
pgAdminIIIの設定サーバ情報はレジストリに格納されているみたい。
HKEY_CURRENT_USER\Software\pgAdmin III\Servers
レジストリをエクスポートして、新端末にインポートしたら無事使えました。
2011年 3月 28日 | Filed under PostgreSQL -
Let’s Postgres
いいサイト発見。
↑ここの「更新処理でHOTを働かせる」トピックが素敵です。
あと、検証が必要な内容かもしれないが、気になるのでメモ。
2010年 6月 16日 | Filed under PostgreSQLタグ: PHP -
[PostgreSQL]カーソル サンプル
あまりにもよく使用するので、テンプレート化してみた。
DECLARE --#------------------------------------------------------------------- --# 使用変数の定義 --#------------------------------------------------------------------- -- アンバウンドカーソル cursor_mydata refcursor; -- フェッチした内容を格納する為のレコード rec_nowdata record; BEGIN --#------------------------------------------------------------------- --# カーソルオープン --#------------------------------------------------------------------- OPEN cursor_mydata FOR --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- --# 以下に、読み込み対象となるSELECT文を定義(ORDER BY句は必須) --# <Todo> SELECT table_dummy.pkey FROM table_dummy ORDER BY table_dummy.pkey --# </Todo> --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- ; --#------------------------------------------------------------------- --# 以下、カーソルフェッチループ --#------------------------------------------------------------------- LOOP --# 現在のカーソルを指定レコードに格納(フェッチする) FETCH cursor_mydata INTO rec_nowdata; IF NOT FOUND THEN --# 最後まで読み込み終わればループ終了 EXIT; END IF; --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- --# 以下に、現在行データに対する処理を記述 --# <Todo> -- ※ rec_nowdata.pkey という感じで、レコードのカラムを使用できます。 --# </Todo> --#--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-- END LOOP; --#------------------------------------------------------------------- --# カーソルクローズ --#------------------------------------------------------------------- CLOSE cursor_mydata; END2010年 2月 19日 | Filed under PostgreSQL -
[PostgreSQL] ランダム文字列の生成
「指定された文字の構成で、ランダムの文字列を生成する。」
よく使うのだけど、なかなか共通の関数として実装されていない機能ですよね。実際作ってみると、かなり重宝してるのでアップしてみました。
CREATE OR REPLACE FUNCTION randomkey( p_seed_char text , p_key_length integer )RETURNS text AS $BODY$ /* --------------------------------------------------------- プロシージャ名 randomkey 処理概要 文字列p_seed_charをもとに p_key_length文字分をランダム文字列を生成 [引数] p_seed_char : ランダム文字列を構成する文字群 , p_key_length : 生成するランダム文字列の長さ [戻り値] 抽出した文字列 [実行例] SELECT randomkey( '1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ' , 10 ) AS result_value ; --------------------------------------------------------- */ DECLARE result_value text := ''; var_now_index integer := 1; BEGIN -- 文字列の長さ分ループしながら、ランダムで構成文字群の1字を付与していく。 WHILE var_now_index <= p_key_length LOOP result_value := result_value || substr(p_seed_char, (trunc( (random() * length(p_seed_char)::float) + 1::float ))::integer, 1); -- ループカウンタのインクリメント var_now_index := var_now_index + 1; END LOOP; RETURN result_value; END $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100;2010年 1月 5日 | Filed under PostgreSQLタグ: PostgreSQL -
[PostgreSQL] 百分率
正数値で、1~100の値のいづれかを、ランダムで1つ取得するストプロを作ってみた。
RANDOM()でもできるのだけど、過去調べてみた時に出力値の範囲にある程度の確率で難ありだそうで、
いまのところ、僕はこちらを愛用してます
CREATE OR REPLACE FUNCTION centile() RETURNS smallint AS $BODY$ /* --------------------------------------------------------- プロシージャ名 centile 処理概要 1~100の数値をランダムで取得する [引数] なし [戻り値] 1~100の数値 [実行例] SELECT centile() AS result_value; --------------------------------------------------------- */ DECLARE result_value smallint := 0; BEGIN SELECT INTO -- 以下、設定先変数の列挙 result_value -- 以下、設定値の列挙 target_data.centile FROM ( SELECT 0::smallint as centile UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9 UNION SELECT 10 UNION SELECT 11 UNION SELECT 12 UNION SELECT 13 UNION SELECT 14 UNION SELECT 15 UNION SELECT 16 UNION SELECT 17 UNION SELECT 18 UNION SELECT 19 UNION SELECT 20 UNION SELECT 21 UNION SELECT 22 UNION SELECT 23 UNION SELECT 24 UNION SELECT 25 UNION SELECT 26 UNION SELECT 27 UNION SELECT 28 UNION SELECT 29 UNION SELECT 30 UNION SELECT 31 UNION SELECT 32 UNION SELECT 33 UNION SELECT 34 UNION SELECT 35 UNION SELECT 36 UNION SELECT 37 UNION SELECT 38 UNION SELECT 39 UNION SELECT 40 UNION SELECT 41 UNION SELECT 42 UNION SELECT 43 UNION SELECT 44 UNION SELECT 45 UNION SELECT 46 UNION SELECT 47 UNION SELECT 48 UNION SELECT 49 UNION SELECT 50 UNION SELECT 51 UNION SELECT 52 UNION SELECT 53 UNION SELECT 54 UNION SELECT 55 UNION SELECT 56 UNION SELECT 57 UNION SELECT 58 UNION SELECT 59 UNION SELECT 60 UNION SELECT 61 UNION SELECT 62 UNION SELECT 63 UNION SELECT 64 UNION SELECT 65 UNION SELECT 66 UNION SELECT 67 UNION SELECT 68 UNION SELECT 69 UNION SELECT 70 UNION SELECT 71 UNION SELECT 72 UNION SELECT 73 UNION SELECT 74 UNION SELECT 75 UNION SELECT 76 UNION SELECT 77 UNION SELECT 78 UNION SELECT 79 UNION SELECT 80 UNION SELECT 81 UNION SELECT 82 UNION SELECT 83 UNION SELECT 84 UNION SELECT 85 UNION SELECT 86 UNION SELECT 87 UNION SELECT 88 UNION SELECT 89 UNION SELECT 90 UNION SELECT 91 UNION SELECT 92 UNION SELECT 93 UNION SELECT 94 UNION SELECT 95 UNION SELECT 96 UNION SELECT 97 UNION SELECT 98 UNION SELECT 99 UNION SELECT 100 ) AS target_data WHERE target_data.centile > 0 ORDER BY RANDOM() LIMIT 1 ; RETURN result_value; END $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100;2010年 1月 5日 | Filed under PostgreSQLタグ: PostgreSQL -
[PostgreSQL] left()と right()
windows系のプログラムを長年やってると、文字列操作で、left()とright()のこの2つの関数がないと、どうもさびしく感じる今日この頃。
substring()を使えばできるのだけど、ついつい面倒を感じるので、ストプロ化。といっても、きっと僕しか使わないだろうけど。
CREATE OR REPLACE FUNCTION "left"( p_strings text , p_position integer )RETURNS text AS $BODY$ /* --------------------------------------------------------- プロシージャ名 left 処理概要 文字列 p_strings を左部分から p_position文字分を抽出した文字列 [引数] p_strings : 抽出元文字列 p_position : 左から何文字目かという位置 [戻り値] 抽出した文字列 [実行例] SELECT left('h001001002',2) AS answer; SELECT left('h001001002',10) AS answer; SELECT left('全角文字',0) AS answer; SELECT left('全角文字',1) AS answer; SELECT left('全角文字',2) AS answer; --------------------------------------------------------- */ DECLARE rtnData text; BEGIN rtnData := substring(p_strings from 1 for p_position); RETURN rtnData; END $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100;CREATE OR REPLACE FUNCTION "right"( p_strings text , p_position integer ) RETURNS text AS $BODY$ /* --------------------------------------------------------- プロシージャ名 right 処理概要 文字列 p_strings を右部分から p_position 文字分を抽出した文字列 [引数] p_strings : 抽出元文字列 p_position : 右から何文字目かという位置 [戻り値] 抽出した文字列 [実行例] SELECT right('h001001002',2) AS answer; SELECT right('h001001002',10) AS answer; SELECT right('全角文字',0) AS answer; SELECT right('全角文字',1) AS answer; SELECT right('全角文字',2) AS answer; --------------------------------------------------------- */ DECLARE rtnData text; BEGIN rtnData := substring(p_strings from length(p_strings)-(p_position-1) for length(p_strings)); RETURN rtnData; END $BODY$ LANGUAGE 'plpgsql' VOLATILE COST 100;2010年 1月 5日 | Filed under PostgreSQLタグ: PostgreSQL