我用它来创建自动递增的 id 列:
id BIGSERIAL -- psql
id BIGINT GENERATED BY DEFAULT AS IDENTITY -- hsql
现在在单元测试中,我想在测试之间重置这些序列。
这可能吗? 我的目标是 PostgreSQL 和 HSQLDB
我用它来创建自动递增的 id 列:
id BIGSERIAL -- psql
id BIGINT GENERATED BY DEFAULT AS IDENTITY -- hsql
现在在单元测试中,我想在测试之间重置这些序列。
这可能吗? 我的目标是 PostgreSQL 和 HSQLDB
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
对于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);