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

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

Mary-Kate Olsen
Freigeben: 2025-01-05 07:42:42
Original
368 Leute haben es durchsucht

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

Beibehalten der Zeilenlöschungsanzahl in PostgreSQL ohne Sortierung und einen Primärschlüssel

In PostgreSQL besteht die Unfähigkeit, Reihenfolge oder Begrenzung mit der Löschsyntax zu kombinieren Eine Herausforderung beim Versuch, eine bestimmte Anzahl von Zeilen zu löschen und dabei die Reihenfolge beizubehalten, in der sie ausgewählt wurden. Dies wird durch das Fehlen eines Primärschlüssels in der Tabelle noch komplizierter.

Lösung: Verwendung der ctid

Um diese Einschränkungen zu umgehen, können wir die ctid (Current Tupel-Identifikator) der Zeilen:

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

Die ctid stellt einen eindeutigen Identifikator für jede Zeilenversion innerhalb ihrer bereit Tisch. Indem wir die ctids der ersten 10 Zeilen nach Zeitstempel sortiert auswählen und in der DELETE-Anweisung verwenden, können wir effektiv die gewünschte Anzahl von Zeilen entfernen, selbst wenn alle Zeitstempelwerte gleich sind.

Betrachten Sie „Partitioniert“. Tabellen

Wenn die Protokolltabelle partitioniert ist, müssen wir die Möglichkeit berücksichtigen, dass mehrere Partitionen Zeilen mit demselben Inhalt enthalten Zeitstempel. Um zu verhindern, dass zu viele Zeilen gelöscht werden, können wir das Tableoid (Tabellenkennung) in die Abfrage einbeziehen:

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

Dadurch wird sichergestellt, dass das Löschen auf die angegebene Anzahl von Zeilen innerhalb jeder Partition begrenzt ist.

Durch die Verwendung von ctid und tableoid können wir die gewünschte Funktionalität des Löschens einer festen Anzahl von Zeilen mit Sortierung in PostgreSQL implementieren, auch wenn keine Primärdatenbank vorhanden ist Schlüssel.

Das obige ist der detaillierte Inhalt vonWie lösche ich eine bestimmte Anzahl geordneter 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