[pgpool-general-jp: 1277] Re: integer型で3分割する定義について (エラーが出たため再送です。)

Yugo Nagata nagata @ sraoss.co.jp
2014年 5月 24日 (土) 10:41:03 JST


On Sat, 24 May 2014 06:37:38 +0900
Inoue Takuma <sessat7 @ gmail.com> wrote:

> 長田様
>  
> 井上です。
>  
> 貴重なアドヴァイスありがとうございます。
> 
> > ====
> >  ここで、pgpool_catalog.dist_def_accountsは、引数として分割キーの値を受け取り、 
> > どのPostgreSQLサーバ(「DBノード」と呼びます)を0からの番号で返す関数です。 
> > ここでは、3台のDBノードにデータを分割する関数の例を示します。
> > 
> > CREATE OR REPLACE FUNCTION pgpool_catalog.dist_def_accounts (val ANYELEMENT) RETURNS INTEGER AS '
> >   SELECT CASE WHEN $1 >= 1 and $1 <= 30000 THEN 0
> >           WHEN $1 > 30000 and $1 <= 60000 THEN 1
> >           ELSE 2
> > END' LANGUAGE SQL;
> > ===
> この場合は、特定の?(ANYELEMENTカラム?) の値が1から30000以下の時バックエンド0に振り分け、30000より大きく60000以下の時1を返すので、バックエンド1に振り分け、どれにも該当しない場合は、バックエンド2に振り分ける。という意味であってますでしょうか。

特定の値、というより、関数に渡される第1引数(具体的にはdist_def.col_name 
に指定したカラムの値)ですね。振り分けのルールの意味はそのとおりです。

>  
> ANYELEMENTの意味がよくわかっていません。

これは「任意の型」という意味ですね。指定したカラムが整数の場合には
ここは INTEGER で置き換えても問題ありません。
http://www.postgresql.jp/document/9.3/html/extend-type-system.html

>  
> よろしくお願いいたします。
>  
> 井上
>  
>  
>  
>  
> 
> > -- 
> > Yugo Nagata <nagata @ sraoss.co.jp>
> 
>  		 	   		  

-- 
Yugo Nagata <nagata @ sraoss.co.jp>


pgpool-general-jp メーリングリストの案内