[pgsql-jp: 36041] Re: PostgreSQLのシーケンス番号処理について

T.Nishimura nisimura @ weloveya.com
2005年 9月 22日 (木) 22:33:08 JST


早川様
中村様

ご回答ありがとうございます。
西村です。

psqlを実行してて、何か自分で解決出来た気がしてきました。
まず、psqlの実行結果ですが。

>
>  SELECT NEXTVAL('table_no_seq') FROM table;
>

honban=# SELECT NEXTVAL('table_no_seq') FROM table;
nextval
----------
     5528
     5529
     5530
     5531
     5532
     5533
(6 rows)


>
>   SELECT no FROM table;
>


> 無駄にシーケンスをカウントアップする事は重大な問題だと思います 
> が...。
>

確かに無駄にシーケンスが増えるのは重大な問題だと思います。

> 私の予想も、早川様と同じくMAXVALUE絡みだと思います。
> 西村様は、他のテーブルでは発生していないのでMAXVALUEでは 
> 無いと
> お考えのようですが、SQLを実行する回数によっては、5 
> 万件のテーブルより
> 数百件のテーブルに方が先にMAXVALUEに到達してしまいます。
>
> この辺の疑問をクリヤにする為にも以下のSQLの結果を教えて 
> ください。
>
> select * from table_no_seq;

honban=# SELECT * FROM table_no_seq;
sequence_name | last_value | increment_by |              
max_value              | min_value | cache_value | log_cnt |  
is_cycled | is_called
       table_no_seq |           5533|                        1 |  
9223372036854775807 |                  1 |                      1  
|         27 | f                 | t
(1 row)


> select count( * ) , max( no ) from table;
>

honban=# SELECT count(*), max(no) FROM table;
count | max
--------+--------
         7 | 5525
(1 row)


上記結果が返ってきました。

それで、自己解決できそうなのは、

test=# SELECT NEXTVAL('table_no_seq') FROM table;
nextval
----------
(0 rows)

と、テストDBにもSQLを投げた時に見つけたのですが、レ 
コード件数0件だと、0rowsで、ワーニングが出てた?のかも 
と・・・・
この、tableは、無尽造に件数が増えるので、クーロンで 
DELETE文を流していたので、件数が0件の時NEXTVAL(FROM付き)
を流すと、0 rowsとして、ワーニングが出てた様な気がします。 
(間違ってます?皆様)

色々とありがとうございました。
また、間違った理解をしている様でしたら、ご指摘お願いします。






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