1

を使用setval('sequence',1)すると、シーケンスの開始値が 1 に設定されます。ただし、レコードが挿入されると、最初の「シーケンス」番号は実際には 2 になります。

実際の最初のレコードのシーケンス番号を 1 にする方法を教えてください。

4

1 に答える 1

4

細かいマニュアルから:

setval
シーケンス オブジェクトのカウンター値をリセットします。2 つのパラメーターのフォームは、シーケンスのlast_valueフィールドを指定された値に設定し、そのフィールドを true に設定します。これは、次が値を返す前にシーケンスを進めることis_calledを意味します。nextval[...]

SELECT setval('foo', 42);           Next nextval will return 43
SELECT setval('foo', 42, true);     Same as above
SELECT setval('foo', 42, false);    Next nextval will return 42

したがって、呼び出しsetval('sequence', 1)はシーケンスの現在の値を に設定し1次の値は になります2。おそらく、次の 3 つの引数形式が必要ですsetval

setval('sequence', 1, false)

シーケンスのis_calledフラグが false になり、nextval('sequence')になります1。また、シーケンスにバインドされた列のデフォルト値は ですnextval('sequence')

于 2016-12-14T19:43:34.213 に答える