OOZOU
與我們聯繫
Back to TIL
macos

Reset Postgres table sequence after DELETE

October 13, 2020

When deleting recent records from a table, you can reset it's sequence counter if auto-increment field continuity is important to you. Consider actions on the following table, users:

select max(id) from users;

+-----+ 
| max | 
+-----+ 
| 896 | 
+-----+ 
1 rows in set (0.03 sec)

Then, some delete action against most recent rows:

delete from users where created_at > timestamp 'yesterday';
96 rows in set (0.15 sec) 

The next auto-increment value for id would be 897 on the next insert. Use the following command to reduce the sequence value for the users table by 96.

select setval('users_id_seq',(select max(id) from users));

+--------+
| setval |
+--------+
| 800    |
+--------+
1 rows in set (0.04 sec)

Why Reset the Sequence?

Resetting a sequence in Postgres is necessary when you want to reinitialize the sequence to a new starting value, allowing for a new contiguous sequence to be generated. This is often required when you need to merge data from multiple databases, change the structure of your database, or recover from data corruption. By resetting the sequence, you can ensure that your primary key columns continue to generate unique and contiguous integers.

Understanding the Primary Key Sequence

A primary key sequence is a database object used to generate unique integer values for primary key columns in a table. It is a crucial component of a relational database management system, as it ensures that each row in a table has a unique identifier. The primary key sequence is typically created when a table is created, and it is used to generate values for the primary key column. Understanding how the primary key sequence works is essential for managing your database effectively.

How to Reset the Sequence

To reset a sequence in Postgres, you can use the ALTER SEQUENCE command. This command allows you to change the definition of a sequence generator, including its starting value, increment, and maximum value. To reset the sequence, you need to specify the name of the sequence, the new starting value, and the increment. For example, to reset a sequence called “my_sequence” to start from 100 with an increment of 1, you would use the following command: ALTER SEQUENCE my_sequence RESTART WITH 100 INCREMENT BY 1; Alternatively, you can use the SETVAL function to reset the sequence to a specific value. This function sets the current value of the sequence to the specified value, and it can be used to reset the sequence to a new starting value. For example: SELECT setval('my_sequence', 100);

Precautions and Considerations

Before resetting a sequence, it is essential to take precautions to avoid data corruption or inconsistencies. Here are some considerations to keep in mind:

  • Make sure you have a backup of your database before making any changes to the sequence.
  • Ensure that you have the necessary permissions to modify the sequence.
  • Be careful when resetting the sequence, as it can affect the integrity of your data.
  • Consider the impact of resetting the sequence on your application and users.

Alternative Methods

In addition to using the ALTER SEQUENCE command or the SETVAL function, there are alternative methods for resetting a sequence in Postgres. One approach is to use the pg_get_serial_sequence function to retrieve the name of the sequence associated with a column, and then use the ALTER SEQUENCE command to reset the sequence. For example: SELECT pg_get_serial_sequence('my_table', 'id'); ALTER SEQUENCE my_table_id_seq RESTART WITH 100; Another approach is to use the SQL function to migrate the primary key sequence to a new starting value. This can be particularly useful when you need to ensure that the sequence values are contiguous and unique across multiple tables or databases.

More on macos

macosAugust 20, 2021

Add a macOS-style drop shadow to your "partial" screen captures or plain-bordered images

By default, and like it or hate it, the macOS keystrokes to capture full app screen (⇧- ⌘- 5) will add a subtle drop shadow around your saved image.  This can make it more visually appealing when…

macosNovember 7, 2020

Convert SVG to PNG

On MacOS, install inkscape (with brew) and use it like this:

macosOctober 13, 2020

Add spacers to your macOS app dock to make groups

Open term (or equivalent) and paste the following one-liner:

有專案構想嗎?

我們很樂意聆聽您正在打造的產品。

開始對話hello@oozou.com
OOZOU Logo

曼谷 · 新加坡 · 香港

X
Facebook
Instagram
LinkedIn

服務

  • Web 開發
  • AI 與生成式 AI 解決方案
  • 行動應用程式開發
  • 資料分析與工程
  • UI/UX 設計與產品設計
  • 數位轉型

公司

  • 關於我們
  • 職涯
  • 部落格
  • 白皮書
  • 案例研究
  • Today I Learned
  • 聯繫我們

更多

  • 產業
  • 索取報價
  • 合作夥伴網絡
© 2026 OOZOU. 版權所有。
隱私政策行為準則反賄賂反貪腐政策