1

これを使用して、自動インクリメントされた id 列を作成します。

  id  BIGSERIAL                                -- psql
  id  BIGINT GENERATED BY DEFAULT AS IDENTITY  -- hsql

単体テストでは、テスト間でこれらのシーケンスをリセットしたいと思います。

これは可能ですか? PostgreSQL と HSQLDB をターゲットにしています

4

2 に答える 2

0

PostgreSQL の場合、pg_get_serial_sequence関数を使用して、自動インクリメントを維持するために使用される基になるシーケンスの名前を検出し、関数を使用しsetvalてそれを操作できます。たとえば、手動で行を挿入または削除した後に、シーケンスをテーブルの最大値に一致させることができます。 :

Select setval(
    pg_get_serial_sequence('table_name', 'column_name'),
    (Select Max(column_name) From table_name),
    TRUE
);

「true」はオプションです (デフォルトの動作)。提供された値が使用されたことをシーケンスに通知し、次の値を提供する前にインクリメントします。Postgres のドキュメントを参照してください

空のテーブルでは、次の値を 1 にする必要がありますが、0 は範囲外であるため、FALSE を渡します。

 Select setval(pg_get_serial_sequence('table_name', 'column_name'), 1, FALSE);
于 2013-04-09T10:29:55.867 に答える