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