ruby 如何在PostgreSQL中删除一些以前的数据后重新启动对表的id计数?

idfiyjo8  于 12个月前  发布在  Ruby
关注(0)|答案(7)|浏览(94)

我在Rails 2.3.8上使用PostgreSQL数据库,我需要在我的表上重新启动自动增量ID。我怎么能这么做呢?

htrmnn0y

htrmnn0y1#

如果截断表,则可以在末尾使用RESTART IDENTITY子句。
范例:
TRUNCATE TABLE foo RESTART IDENTITY;
TRUNCATE DOCUMENTATION

disho6za

disho6za2#

你可以通过以下方式来做到这一点:
ActiveRecord::Base.connection.execute("TRUNCATE TABLE your_table_name RESTART IDENTITY")

aamkag61

aamkag613#

你可以直接在PostgreSQL中使用“alter sequence”:http://www.postgresql.org/docs/current/static/sql-altersequence.html
特别是“重新开始”
我不知道你是如何通过rails抽象来实现的。

slsn1g29

slsn1g294#

试试看:

ActiveRecord::Base.connection.reset_pk_sequence!(table_name)

并检查此答案以了解更多细节:https://stackoverflow.com/a/7814519/1392282

ac1kyiln

ac1kyiln5#

查看setval

SELECT setval('foo', 42);           Next nextval will return 43
SELECT setval('foo', 42, true);     Same as above
SELECT setval('foo', 42, false);    Next nextval will return 42
u3r8eeie

u3r8eeie6#

如果你想从表中删除所有数据,并希望重置ID,然后尝试下面的代码。
ActiveRecord::Base.connection.execute(“TRUNCATE TABLE your_table_name RESTART IDENTITY”)
但是,如果表中存在某种关系,并且您希望删除表中的所有数据以及相关的表数据,则请尝试下面的代码。
ActiveRecord::Base.connection.execute(“TRUNCATE TABLE your_table_name RESTART IDENTITY CASCADE”)
谢谢,如果需要修改,请提出建议。

wooyq4lh

wooyq4lh7#

您可以在Rails中使用ActiveRecord。
你可以在你的rails控制台上运行下面的命令:

Table_name.reset_primary_key

也可以使用SQL

TRUNCATE TABLE foo RESTART IDENTITY;

相关问题