Heim >Datenbank >MySQL-Tutorial >Wie lösche ich eine bestimmte Anzahl geordneter Zeilen in PostgreSQL ohne Primärschlüssel?
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 );
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 );
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!