アーカイブ

  • [pgAdminIII]サーバ情報のバックアップ

    pgAdminIIIの設定サーバ情報はレジストリに格納されているみたい。

    HKEY_CURRENT_USER\Software\pgAdmin III\Servers
    

    レジストリをエクスポートして、新端末にインポートしたら無事使えました。

    2011年 3月 28日 | Filed under PostgreSQL
  • Let’s Postgres

    Let’s Postgres

    いいサイト発見。

    HOTの効果

    ↑ここの「更新処理でHOTを働かせる」トピックが素敵です。

    あと、検証が必要な内容かもしれないが、気になるのでメモ。

    PostgreSQLを本当に高速化したい人のための10のポイント

    2010年 6月 16日 | Filed under PostgreSQL
    タグ:
  • [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;
    
    END
    
    2010年 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 &lt;= 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] 百分率

    正数値で、1~100の値のいづれかを、ランダムで1つ取得するストプロを作ってみた。

    RANDOM()でもできるのだけど、過去調べてみた時に出力値の範囲にある程度の確率で難ありだそうで、
    いまのところ、僕はこちらを愛用してます440.gif

    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] 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’ のアーカイブ