Maison > base de données > tutoriel mysql > Comment supprimer un nombre spécifique de lignes ordonnées dans PostgreSQL sans clé primaire ?

Comment supprimer un nombre spécifique de lignes ordonnées dans PostgreSQL sans clé primaire ?

Mary-Kate Olsen
Libérer: 2025-01-05 07:42:42
original
325 Les gens l'ont consulté

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

Préserver le nombre de suppressions de lignes dans PostgreSQL sans tri ni clé primaire

Dans PostgreSQL, l'impossibilité de combiner l'ordre ou la limite avec la syntaxe de suppression pose un défi lorsque l'on tente de supprimer un nombre spécifique de lignes tout en préservant l'ordre dans lequel elles sont sélectionnées. Ceci est encore compliqué par l'absence de clé primaire dans la table.

Solution : utiliser le ctid

Pour contourner ces limitations, nous pouvons exploiter le ctid (Current Tuple Identifier) ​​des lignes :

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
Copier après la connexion

Le ctid fournit un identifiant unique pour chaque version de ligne au sein de sa table. En sélectionnant les ctids des 10 premières lignes triées par horodatage et en les utilisant dans l'instruction DELETE, nous pouvons supprimer efficacement le nombre de lignes souhaité, même si toutes les valeurs d'horodatage sont les mêmes.

Considérez partitionné Tables

Si la table de journalisation est partitionnée, nous devons tenir compte de la possibilité de plusieurs partitions contenant des lignes avec le même horodatage. Pour éviter de supprimer trop de lignes, nous pouvons inclure le tableoïde (identifiant de table) dans la requête :

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
Copier après la connexion

Cela garantit que la suppression est limitée au nombre spécifié de lignes dans chaque partition.

En utilisant le ctid et le tableoid, nous pouvons implémenter la fonctionnalité souhaitée de suppression d'un nombre fixe de lignes avec tri dans PostgreSQL, même en l'absence de ligne principale. clé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal