ホームページ >データベース >mysql チュートリアル >主キーを使用せずに PostgreSQL で特定の数の順序付けされた行を削除するにはどうすればよいですか?
並べ替えと主キーを使用せずに PostgreSQL で行削除数を保持する
PostgreSQL では、順序付けや制限と削除構文を組み合わせられないことが問題となります。選択された順序を維持しながら特定の数の行を削除しようとする場合の課題。これは、テーブルに主キーがないためさらに複雑になります。
解決策: ctid の利用
これらの制限を回避するには、ctid (Current行のタプル識別子):
DELETE FROM ONLY logtable WHERE ctid IN ( SELECT ctid FROM logtable ORDER BY timestamp LIMIT 10 );
ctid は、一意のテーブル内の各行バージョンの識別子。タイムスタンプでソートされた最初の 10 行の ctid を選択し、DELETE ステートメントで使用すると、すべてのタイムスタンプ値が同じであっても、必要な数の行を効果的に削除できます。
パーティション化を検討するテーブル
ログテーブルがパーティション化されている場合、複数のパーティションが含まれる可能性を考慮する必要があります。同じタイムスタンプを持つ行。削除する行が多すぎるのを防ぐために、クエリに tableoid (テーブル識別子) を含めることができます。
DELETE FROM logtable WHERE (tableoid,ctid) IN ( SELECT tableoid,ctid FROM logtable ORDER BY timestamp LIMIT 10 );
これにより、削除が各パーティション内の指定された行数に制限されるようになります。
ctid と tableoid を利用することで、プライマリが存在しない場合でも、PostgreSQL でソートを使用して固定数の行を削除するという目的の機能を実装できます。キー。
以上が主キーを使用せずに PostgreSQL で特定の数の順序付けされた行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。