繁体   English   中英

更改自动生成的序列

[英]Alter auto-generated sequence

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

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

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

这可能吗? 我针对PostgreSQL和HSQLDB

对于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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM