ホームページ > データベース > mysql チュートリアル > 主キーを使用せずに PostgreSQL でソートされた特定の数の行を削除するにはどうすればよいですか?

主キーを使用せずに PostgreSQL でソートされた特定の数の行を削除するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-12-31 05:27:10
オリジナル
1029 人が閲覧しました

How to Delete a Specific Number of Sorted Rows in PostgreSQL Without a Primary Key?

PostgreSQL でのソートによる固定数の行の削除

PostgreSQL では、DELETE 構文の制限のため、ソートによる行の削除が困難になる場合があります。この問題は、主キーがないことでさらに悪化し、サブクエリ ソリューションが実用的ではなくなります。

この課題に対処するには、テーブル内の各行の一意の識別子である ctid フィールドを利用できます。 ctid を利用すると、並べ替え基準に基づいて特定の行を削除するクエリを作成できます。

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
ログイン後にコピー

ctid フィールドは、行バージョンごとに一意の識別子を提供します。ただし、VACUUM FULL によって行が更新または移動された場合は変更される可能性があることに注意することが重要です。さらに、ログテーブルに継承されたテーブルがある場合、DELETE FROM ONLY 句により、子孫テーブルから行が誤って削除されるのを防ぎます。

ログテーブルがパーティション化されている場合、削除が複数のテーブル間でのみ行われるようにクエリに tableoid を含める必要があります。対象のパーティション:

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
ログイン後にコピー

これらの手法を使用すると、並べ替え基準に基づいて固定数の行を効果的に削除できます。正確な削除の動作を維持しながら、重複するタイムスタンプに関係なく、指定された行数が確実に削除されます。

以上が主キーを使用せずに PostgreSQL でソートされた特定の数の行を削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート