9

テスト データを DB テーブルにシードする前に、テーブルを切り捨てる必要があります (主キーをリセットする必要があります)。次のようにしようとしています。

ActiveRecord::Base.connection.execute("TRUNCATE users")

しかし、DB からデータを出力しても、主キーが 1 からカウントされていません。

私は何を間違っていますか?

編集:

また、ターミナルでPostgreSQLデータベースに対して手動で実行しようとしました

truncate users

しかし、プライマリ カウントはまだ 1 から始まりません。

解決:

Postgres で、次を実行します。

ALTER SEQUENCE users_id_seq RESTART WITH 1;
4

4 に答える 4

7

MySQLでは、すべての行TRUNCATE table;削除し、自動インクリメントカウンターをリセットします。

PostgreSQLでは、これは自動的には行われません。を使用できますTRUNCATE TABLE table RESTART IDENTITY;

念のために言っておきますが、 SQLiteにはTRUNCATEステートメントはなく、代わりに

DELETE FROM table;
DELETE FROM sqlite_sequence WHERE name='table';
于 2013-02-26T22:46:39.307 に答える
5

これは遅すぎます。この質問に答えていますが、これが他の人の助けになることを願っています。データベース スキーマに影響を与えずにデータベースをクリーンアップするのに役立つ Database Cleanerと呼ばれる GEM

をインストールする必要があります (または、Gemfileに追加することもできます)。gem 'database_cleaner'

rake db:seed

DatabaseCleaner.clean_with(:truncation)

シードファイルの上部にあります。データベースがクリアされ、カウントが1再開されます。


免責事項:この更新された回答はテストされており、私のシステムで完全に機能しています

于 2016-09-25T09:16:41.473 に答える
0

私が使用したcsv_upload.rbのRails内から、それは機能しました。

ActiveRecord::Base.connection.execute('TRUNCATE model_name RESTART IDENTITY')

于 2014-04-23T07:03:18.297 に答える