Heim > Datenbank > MySQL-Tutorial > Wie lösche ich eine bestimmte Anzahl sortierter Zeilen in PostgreSQL ohne Primärschlüssel?

Wie lösche ich eine bestimmte Anzahl sortierter Zeilen in PostgreSQL ohne Primärschlüssel?

Linda Hamilton
Freigeben: 2024-12-31 05:27:10
Original
1023 Leute haben es durchsucht

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

Löschen einer festen Anzahl von Zeilen mit Sortierung in PostgreSQL

Das Löschen von Zeilen mit Sortierung kann in PostgreSQL aufgrund der Einschränkungen in der DELETE-Syntax eine Herausforderung darstellen. Dieses Problem wird durch das Fehlen eines Primärschlüssels noch verschärft, was Unterabfragelösungen unpraktisch macht.

Um dieser Herausforderung zu begegnen, können Sie das ctid-Feld verwenden, eine eindeutige Kennung für jede Zeile innerhalb einer Tabelle. Durch die Nutzung der ctid können Sie eine Abfrage erstellen, die auf der Grundlage von Sortierkriterien auf bestimmte zu löschende Zeilen abzielt:

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

Das ctid-Feld stellt eine eindeutige Kennung für jede Zeilenversion bereit. Es ist jedoch wichtig zu beachten, dass es sich ändern kann, wenn die Zeile durch VACUUM FULL aktualisiert oder verschoben wird. Wenn die Protokolltabelle außerdem über geerbte Tabellen verfügt, verhindert die DELETE FROM ONLY-Klausel das versehentliche Löschen von Zeilen aus untergeordneten Tabellen.

Falls die Protokolltabelle partitioniert ist, muss Tableoid in die Abfrage einbezogen werden, um sicherzustellen, dass das Löschen nur übergreifend erfolgt die beabsichtigten Partitionen:

DELETE FROM logtable
WHERE (tableoid,ctid) IN (
    SELECT tableoid,ctid
    FROM logtable
    ORDER BY timestamp
    LIMIT 10
);
Nach dem Login kopieren

Mit diesen Techniken können Sie effektiv eine feste Anzahl von Zeilen basierend auf Sortierkriterien löschen. Unter Beibehaltung des Verhaltens des exakten Löschens wird sichergestellt, dass die angegebene Anzahl von Zeilen unabhängig von doppelten Zeitstempeln entfernt wird.

Das obige ist der detaillierte Inhalt vonWie lösche ich eine bestimmte Anzahl sortierter Zeilen in PostgreSQL ohne Primärschlüssel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage