改变自动生成的序列

时间:2013-04-09 09:51:43

标签: sql unit-testing postgresql hsqldb

我用它来创建自动增加的id列:

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

现在在单元测试中,我想在测试之间重置这些序列。

这可能吗?我的目标是PostgreSQL和HSQLDB

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分: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”是可选的(默认行为);它告诉序列提供的值已被使用,并在提供下一个值之前增加。见the Postgres documentation

在空表上,您希望下一个值为1,但0超出范围,因此您将传递FALSE:

 Select setval(pg_get_serial_sequence('table_name', 'column_name'), 1, FALSE);