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

Yugo Nagata nagata @ sraoss.co.jp
2014年 5月 24日 (土) 04:06:28 JST


長田です。

On Fri, 23 May 2014 03:32:42 +0900
切磋琢麿 <sessat7 @ gmail.com> wrote:

> 初めまして、井上と申します。
> 
> 
> pgpool-IIでパラレルクエリを試そうとし、とりあえず、integer型で2分割する定義をマイナビさんの記事で見たのです。
> 
> そこには、
> 
> 
> CREATE OR REPLACE FUNCTION pgpool_catalog.dist_rule (val INTEGER)
> RETURNS INTEGER AS
> $$ SELECT $1 % 2 $$
> LANGUAGE SQL;
> 
> 
> とかかれていて、そのまま流用したところ、うまく2分割できました。
> 
> 
> そこで、次に3分割させてみたいのですが、何にも文法がわからずに、流用していたので、どうすれば3分割にできるのかわかりません。非常に恥ずかしいのですが、何か参考になるようなものを探したのですがさっぱりです。

分割ルールの関数 dist_def_func は分割キーの値(dist_def.col_name に指定したカラムの値)を引数にとり、
分割先のノード番号を返します。

PostgreSQLのユーザ定義関数の文法はドキュメントを参考していただくとよいと思いますが、
http://www.postgresql.jp/document/9.3/html/xfunc-sql.html
本体となるのは

> $$ SELECT $1 % 2 $$

の部分です。

これは「第1引数を2で割った余り」を計算し0または1を返します。つまり、分割キーの値が
偶数ならノード0に奇数ならノード1に分割されます。

したがって、同様に剰余を使って3分割したい場合には、3 で割った余りを計算するようにすればOKです。

$$ SELECT $1 % 3 $$

n 分割の場合も同様です。

> 
> 
> どなたか、3分割するにはどうすればよいのか、将来的にはn分割、というのも含めてご教授願えればありがたいです。
> 
> 
> よろしくお願いいたします。
> 
> 
> 井上


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


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