問題タブ [rowdeleting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - オブジェクトごとに最後の 5 行のみを監査テーブルに保持する
Postgres (v11) データベースと、テーブルの各行がオブジェクトとして表示され、各列がオブジェクトのフィールドであるメイン テーブルに基づく Web アプリケーションがあります。
したがって、次のようになります。
テーブルは次を使用して作成されました。
これで、すべてのオブジェクトのすべてのフィールドへの更新を格納する監査テーブルができました。監査テーブルは次のように定義されます。
テーブルは次を使用して作成されました。
oldval
/newval
はvarchar
純粋に監査目的であるため、実際のデータ型は重要ではありません。
明らかな理由から、このテーブルはここ数年ほどで大きくなったので、古いデータをいくつか削除したいと思いました。誰かが、すべてのオブジェクトの最後の 5 つの更新のみを保持することを提案しました (つまり、UI は、監査テーブルから最後の 5 つの更新を表示できます)。
GROUP BY
aと aを使用してこれを取得できることは理解していますLIMIT
が、問題は、100 万以上のオブジェクトがあり、1000 回以上更新されたものもあれば、数年にわたってほとんど更新されていないものもあります。また、監査ログの読み取り/書き込みが非常に多くなっています (予想どおり)。
各オブジェクトの 5 番目の最新の更新よりも古いすべてのエントリを削除する最善の方法は何でしょうか (もちろん、理想的にはそれをセカンダリ ストレージに移動します)。