2013-04-09 35 views
0

我使用它來創建自動增加內徑柱:阿爾特自動生成序列

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

現在,在單元測試中,我想測試之間的那些序列復位。

這可能嗎?我的目標PostgreSQL和HSQLDB

回答

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

「真實」是可選的(默認行爲);它告訴所提供的值已被使用的順序,並在提供下一個值之前遞增。見the Postgres documentation

在一個空表,你想下一個值是1,而0是超出了範圍,所以你會通過FALSE:

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

注意,雖然只是在不清除記錄的情況下重新設置序列,但很快就會導致已有鍵的問題。 – deceze 2013-04-09 10:53:31

+0

@deceze \t確實。因此,我給出了第一個例子,這對於在手動「擺弄」表格中的某些數據但不清空它之後立即放置序列很有用。 – IMSoP 2013-04-09 14:50:38