2

postgreSQL を使用する Rails アプリがあります。

最近、本番環境のバックアップを作成し、それを開発環境に復元しました。

開発中に Payment レコードを追加しようとすると、次のようになります。

ERROR:  duplicate key value violates unique constraint "payments_pkey"
DETAIL:  Key (id)=(1) already exists.

ただし、テーブルには id=1 のレコードが 1 つしかなく、payments_id_seq の現在の値は 1 です。

では、Rails が id=2 を追加しようとしていないのはなぜですか??

助けてくれてありがとう!

PS - id_seq を強制的に正しくするためのスクリプトまたはコマンドが pgadmin にありますか?

4

2 に答える 2

7

PostgreSQL の一意のキー違反のエラー メッセージ (「重複するキーの値が一意の制約に違反しています...」) を受け取った場合、たとえばデータベースにデータを入力した後などに、主キーのインデックスが同期していない可能性があります。

使用する

ActiveRecord::Base.connection.reset_pk_sequence!('[table_name]')

users テーブルの順序を修正します。

于 2014-06-02T16:24:50.743 に答える
3

おそらく、データベースをコピーするために使用した方法が途中でシーケンスを更新しなかったため、標準のダンプ/復元でそれを処理する必要がありますが、行ごとに手動でコピーした場合は、修正する必要がありますを使用してsetval

table のシーケンスのみを修正する必要がある場合はT、コンソールからこれを行うことができます。

ActiveRecord::Base.connection.execute(%q{
    select setval('T_id_seq', m)
    from (
        select max(id) from T
    ) as dt(m)
})

または、その SQL を pgadmin にフィードできます。テーブルごとにそれを繰り返しますT

于 2013-09-13T23:14:09.843 に答える