sql >> データベース >  >> RDS >> PostgreSQL

postgresqlエラーPANIC:有効なチェックポイントレコードを見つけることができませんでした

    トランザクションログで、おそらく存在しないか破損しているチェックポイントレコードを探しています。次のコマンドを実行することで、これが当てはまるかどうかを判断できます。

    # Postgres >= 10
    pg_resetwal DATADIR
    
    # Postgres < 10
    pg_resetxlog DATADIR
    

    トランザクションログが破損している場合は、次のようなメッセージが表示されます:

    データベースサーバーが正常にシャットダウンされませんでした。トランザクションログをリセットすると、データが失われる可能性があります。とにかく続行する場合は、-fを使用します 強制的にリセットします。

    その後、指示に従い、-fで実行できます。 更新を強制するには:

    # Postgres >= 10
    pg_resetwal -f DATADIR
    
    # Postgres < 10
    pg_resetxlog -f DATADIR 
    

    これによりトランザクションログがリセットされますが、pg_resetwalのPostgreSQLドキュメントで説明されているように、データベースが不確定な状態になる可能性があります。 :

    pg_resetwalの場合 pg_controlの有効なデータを判別できないと文句を言う 、-fを指定することで、とにかく続行するように強制できます。 (強制)オプション。この場合、欠落しているデータの代わりにもっともらしい値が使用されます。ほとんどのフィールドは一致すると予想できますが、次のOID、次のtransactionIDとエポック、次のマルチトランザクションIDとオフセット、およびWAL開始位置フィールドに対して手動の支援が必要になる場合があります。これらのフィールドは、以下で説明するオプションを使用して設定できます。これらすべてのフィールドの正しい値を判別できない場合は、-f 引き続き使用できますが、リカバリされたデータベースは通常よりもさらに疑わしい方法で処理する必要があります。ただちにダンプしてリロードする必要があります。ダンプする前に、データベースでデータ変更操作を実行しないでください。このような操作を行うと、破損が悪化する可能性があります。



    1. PHPからMySQLに挿入する(jQuery / AJAX)

    2. PHPで高精度の小数を操作するにはどうすればよいですか

    3. 関数から結果セットを返す

    4. mysqldumpのベストプラクティス:パート1 –MySQLの前提条件