[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 メーリングリストの案内