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

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

Linda Hamilton
Libérer: 2024-12-31 05:27:10
original
1022 Les gens l'ont consulté

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

Supprimer un nombre fixe de lignes avec tri dans PostgreSQL

Supprimer des lignes avec tri peut être un défi dans PostgreSQL en raison de ses limitations dans la syntaxe DELETE. Ce problème est encore aggravé par l'absence de clé primaire, ce qui rend les solutions de sous-requête peu pratiques.

Pour relever ce défi, vous pouvez utiliser le champ ctid, un identifiant unique pour chaque ligne d'une table. En tirant parti du ctid, vous pouvez créer une requête qui cible des lignes spécifiques à supprimer en fonction de critères de tri :

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

Le champ ctid fournit un identifiant unique pour chaque version de ligne. Cependant, il est essentiel de noter que cela peut changer si la ligne est mise à jour ou déplacée par VACUUM FULL. De plus, si la table de journalisation a hérité de tables, la clause DELETE FROM ONLY empêche la suppression accidentelle de lignes des tables descendantes.

Dans le cas où la table de journalisation est partitionnée, il est nécessaire d'inclure le tableoïde dans la requête pour garantir que la suppression se produit uniquement dans les partitions prévues :

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

Grâce à ces techniques, vous pouvez supprimer efficacement un nombre fixe de lignes en fonction de critères de tri, tout en préservant la comportement de suppression exacte, garantissant que le nombre spécifié de lignes est supprimé quels que soient les horodatages en double.

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