Maison >base de données >tutoriel mysql >Comment puis-je supprimer des lignes dans PostgreSQL dans un ordre spécifique sans clé primaire ?
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!