Postgres - 如何删除一行及其顺序?
Postgres - How to delete a row with its sequence?
我在 Postgres 中创建了一个名为 table 的带有序列号的产品:
CREATE TABLE PRODUCTS (
PRODUCT_ID serial PRIMARY KEY,
NAME VARCHAR ( 100 ) NOT NULL );
如果我用
删除了一行
DELETE FROM PRODUCTS WHERE PRODUCT_ID = 2
即使 Product_Id: 2 已被删除,下一个要插入的产品将具有 ID:3,我想删除数据及其序列,以便下一个插入具有 ID:2 .
这通常是个坏主意。 ID通常不是你需要填补空白的地方。
但是,如果您只想手动执行此操作,则可以手动插入包含 ID 值的新行,这样就不会使用序列。
您可以使用 Postgres 函数(例如 setval)重置序列,但您真的不应该这样做,除非在某些数据库恢复情况下。
习惯 ID 不连续的事实。这是常态。如果您有时间四处寻找序列号,您可能正在做一些富有成效的事情。
如果您确实需要某些不变的内容(例如类别)的顺序 ID,只需在插入所有数据后导出并重新创建 table,导入时省略 ID 列。但请记住,ID 通常由其他 table 人使用,因此每次您想要很好地重新编号您的 ID 时,您可能必须更新所有数据库。
我在 Postgres 中创建了一个名为 table 的带有序列号的产品:
CREATE TABLE PRODUCTS (
PRODUCT_ID serial PRIMARY KEY,
NAME VARCHAR ( 100 ) NOT NULL );
如果我用
删除了一行DELETE FROM PRODUCTS WHERE PRODUCT_ID = 2
即使 Product_Id: 2 已被删除,下一个要插入的产品将具有 ID:3,我想删除数据及其序列,以便下一个插入具有 ID:2 .
这通常是个坏主意。 ID通常不是你需要填补空白的地方。
但是,如果您只想手动执行此操作,则可以手动插入包含 ID 值的新行,这样就不会使用序列。
您可以使用 Postgres 函数(例如 setval)重置序列,但您真的不应该这样做,除非在某些数据库恢复情况下。
习惯 ID 不连续的事实。这是常态。如果您有时间四处寻找序列号,您可能正在做一些富有成效的事情。
如果您确实需要某些不变的内容(例如类别)的顺序 ID,只需在插入所有数据后导出并重新创建 table,导入时省略 ID 列。但请记住,ID 通常由其他 table 人使用,因此每次您想要很好地重新编号您的 ID 时,您可能必须更新所有数据库。