use*_*621 8 sql postgresql ruby-on-rails
在将测试数据播种到DB表之前,我需要截断表(我需要重置主键),我试着这样做:
ActiveRecord::Base.connection.execute("TRUNCATE users")
Run Code Online (Sandbox Code Playgroud)
但是当我从DB打印出数据时,我仍然没有看到从1计数主键.
我究竟做错了什么?
编辑:
另外,我已经尝试在终端中手动运行PostgreSQL数据库
truncate users
Run Code Online (Sandbox Code Playgroud)
但主要数量仍然不是从1开始.
解:
在Postgres中,运行:
ALTER SEQUENCE users_id_seq RESTART WITH 1;
Run Code Online (Sandbox Code Playgroud)
在MySQL中,TRUNCATE table;
删除所有行并重置自动增量计数器.
在PostgreSQL中,它不会自动执行此操作.你可以用TRUNCATE TABLE table RESTART IDENTITY;
.
仅供记录:在SQLite中,没有TRUNCATE
声明,相反,它是
DELETE FROM table;
DELETE FROM sqlite_sequence WHERE name='table';
Run Code Online (Sandbox Code Playgroud)
如果您的数据库是postgres,则可以执行以下操作来截断模型的db表:
[
MyModel1,
MyModel2,
MyModel3
].each do |m|
ActiveRecord::Base.connection.execute("TRUNCATE TABLE #{m.table_name} RESTART IDENTITY;")
end
Run Code Online (Sandbox Code Playgroud)
现在回答这个问题为时已晚,但我希望这会对其他人有所帮助。
你必须安装(或者你可以添加gem 'database_cleaner'
到你的 Gemfile 中)一个名为Database Cleaner的 GEM ,它有助于清理你的数据库而不影响你的数据库架构。_
每次清理你的数据库rake db:seed
然后粘贴
DatabaseCleaner.clean_with(:truncation)
Run Code Online (Sandbox Code Playgroud)
在种子文件的顶部。它将清除您的数据库并重新开始计数1
。
免责声明:这个更新的答案已经过测试,并且在我的系统中完美运行。
归档时间: |
|
查看次数: |
5923 次 |
最近记录: |