2012-06-29 4 views
9

Mögliche Duplizieren:
Why do results from a SQL query not come back in the order I expect?Ist die PostgreSQL-Bestellung vollständig garantiert, wenn nach einem nicht eindeutigen Attribut sortiert wird?

Von 7.5 Sorting Rows zu lesen und von Fragen, die ich mit PostgreSQL gesehen habe, habe den Eindruck, die folgenden, aber dieser Abschnitt nicht vollständig explizit, so würde ich Seien Sie dankbar, wenn jemand bestätigen könnte:

SELECT * FROM items; 

hat keine garantierte Bestellung.

SELECT * FROM items ORDER BY published_date ASC; 

garantiert, dass zwei Elemente mit unterschiedlichen Terminen kommen in einer bestimmten Reihenfolge, aber tun nicht Garantie, dass zwei Elemente mit dem gleichen Datum immer in der gleichen Reihenfolge kommen.

SELECT * FROM items ORDER BY published_date ASC, id ASC; 

liefert immer Elemente in der gleichen Reihenfolge, da es vollständig deterministisch ist.

Habe ich das richtig?

Ich bin nicht ganz klar darüber, ob die Sortierung auf ein Attribut (wie published_date) die Reihenfolge für Datensätze mit dem gleichen Wert garantiert, wie im zweiten Beispiel.

+9

Sie haben es richtig. Die einzige Reihenfolge, die garantiert ist, ist die Reihenfolge, die Ihr "ORDER BY" auferlegt. Wenn innerhalb dieser Reihenfolge Permutationen * möglich sind, könnten diese alle eine gültige Ausgabe sein. – wildplasser

+1

Dies ist ein spezieller Fall der Frage: http://stackoverflow.com/questions/10999913/why-do-results-from-a-sql-query-not-come-back-in-the-order-i- Erwarten Sie –

Antwort

10

Bestellen Sie is not guaranteed, es sei denn Sie spezifizieren es ausdrücklich mit der ORDER BY Klausel.

Sie möglicherweise erhalten Daten in der gleichen Reihenfolge bei mehreren Ausführungen für den Fall, dass keine Datenbankaktivität, wie PostgreSQL nur Zeilen in der Reihenfolge zurückgibt, die es in den Datenbankseiten findet. Führen Sie einen kleinen Test durch:

  • fügen Sie eine Reihe von Zeilen ein, die die gewünschte Reihenfolge beibehalten;
  • Abfrage der Tabelle: Sie erhalten Zeilen bestellt;
  • aktualisieren Sie den allerersten Datensatz im Satz;
  • Abfrage die Tabelle erneut;
  • beobachten Sie die Ergebnisse.

Kurz gesagt: Sie könnte auch immer Zeilen in der gewünschten Ordnung sein, aber das ist nur ein Zufall.

+0

Eine beständige mögliche Reihenfolge ist ** nicht ** ein Zufall, weil es wegen des zugrundeliegenden Datenzugriffs und seiner inneren Organisation ist. Sie haben jedoch Recht, dass Benutzer sich nicht darauf verlassen können, weil sie sich aus Gründen ändern kann, die völlig unabhängig von der Anwendung sind, wie die Erstellung eines Indexes oder die Verlagerung von Datenbankdateien. –

+0

Danke! Ich habe diese Handbuchseite gelesen (verlinkt mit der Frage), aber ich fühlte, dass es in diesem speziellen Fall nicht explizit genug war. –

+0

Insbesondere "Eine bestimmte Ausgabe Reihenfolge kann nur garantiert werden, wenn der Sortierschritt explizit ausgewählt ist." Nicht klar, ob "der Sortierschritt explizit ausgewählt wurde", indem in einer nicht eindeutigen Spalte sortiert wird. –