Maison >base de données >tutoriel mysql >Comment puis-je supprimer des lignes dans PostgreSQL dans un ordre spécifique sans clé primaire ?

Comment puis-je supprimer des lignes dans PostgreSQL dans un ordre spécifique sans clé primaire ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-30 07:43:11457parcourir

How Can I Delete Rows in PostgreSQL in a Specific Order Without a Primary Key?

Préservation de l'ordre de suppression des lignes dans PostgreSQL sans clé primaire

Dans MySQL, la requête DELETE FROM logtable ORDER BY timestamp LIMIT 10 ; supprime sans effort un nombre spécifié de lignes d'une table tout en conservant l'ordre de tri. Cependant, PostgreSQL pose un défi en interdisant l'ordre ou les limites dans sa syntaxe de suppression, en particulier lorsque la table ne dispose pas d'une clé primaire.

Surmonter la contrainte de clé primaire

Pour contourner Cet obstacle, PostgreSQL propose une solution qui utilise le ctid. Le ctid représente l'emplacement physique de chaque ligne dans la table. Bien qu'il ne s'agisse pas d'un identifiant permanent, son caractère unique par table en fait une alternative viable à la suppression de lignes.

Utilisation du ctid

Le ctid peut être exploité pour supprimer un identifiant prédéterminé. nombre de lignes triées avec la requête suivante :

DELETE FROM ONLY logtable
WHERE ctid IN (
    SELECT ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);

DELETE FROM ONLY restreint l'opération de suppression au spécifié table, empêchant les suppressions accidentelles des tables héritées.

Gestion des partitions et des paramètres de sécurité

Si la table de journalisation est partitionnée, vous devez inclure le tableoïde (ID de table) dans la requête pour empêcher les suppressions de se produire dans plusieurs partitions.

De plus, si des politiques de sécurité sont mises en œuvre, vous devrez peut-être ajuster la requête pour garantir droits d'accès appropriés.

Remarque supplémentaire

Il est crucial de se rappeler que le ctid peut changer lorsque les lignes sont mises à jour ou déplacées par VACUUM FULL. Si vous avez l'intention d'utiliser ctid comme identifiant de ligne à long terme, gardez cette limitation à l'esprit.

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!

Déclaration:
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