2017-06-02 32 views
1

私はpostgresqlシーケンスをテストしていました(PostgreSQL 9.3でhttp://sqlfiddle.comを使用していましたが、現時点ではPostgreSQLのセットアップをローカルに持っていません)が、私は奇妙な動作を見ていました。PostgreSQLシーケンスnextval()strange behavior

その後シーケンス

CREATE SEQUENCE counter_seq; 
ALTER SEQUENCE counter_seq RESTART 9223372036854775805; 

を作成シーケンスfromt次の値を選択:

SELECT nextval('counter_seq'); 

は結果が9223372036854776000たBIGINTの範囲外にありますか!?!?

シーケンス自体が正しく更新されたように見えましたが(選択した数がERROR: nextval: reached maximum value of sequence "counter_seq" (9223372036854775807)の場合は失敗しますが)、実行したときにはnextvalの結果が正しくありませんでした。

私は、はるかに低いと配列を設定してみました:

ALTER SEQUENCE counter_seq RESTART 5223372036854775805; 
SELECT nextval('counter_seq'); 

をしかし、結果は以下のとおりであった:

5223372036854776000 

私は5000000000000000にシーケンス値を落としたまで、私は信頼性の高い動作を得ることができませんでした。

これはpostgresqlのバグかsqlfiddleですか?

+0

もう1つのセッションはロールシーケンスですか? –

+0

おそらく、私は異なるシーケンス名でsqlfiddleをテストして同じことをしました正確な結果。だから私は何かが彼らの側で壊れていると仮定することは安全だと思います。 –

+0

** counter_seq **はあまりにも一般的な名前だ - 誤解されていない場合 - ユーザーが同じスキーマを共有しているので、人々はあなたのシーケンスを先に進めていると思う –

答えて

1

SQLFiddleエラーまたはpgsql 9.3の問題のようです。私は自分のローカル9.6で同じ結果を得ていません。http://rextester.com/COJS32891

+0

は、 'PostgreSQL 9.3.14 x86_64-redhat-linux-gnuで再生成されませんでしたgcc(GCC)4.8.3 20140911(Red Hat 4.8.3-9)、64ビット ' –

+0

@VaoTsunそれは安心して、感謝しています。 – Neilos

+0

@ŁukaszKamińskiは私が今からrextesterを使用しているように見える – Neilos