1

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

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

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

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

4

2 回答 2

2
TRUNCATE table RESTART IDENTITY;

http://www.postgresql.org/docs/9.2/static/sql-truncate.html
http://hsqldb.org/doc/guide/dataaccess-chapt.html#dac_truncate_statement

于 2013-04-09T09:55:51.043 回答
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 回答