3 Stimmen

dieselbe Abfrage liefert unterschiedliche Ergebnisse in verschiedenen Versionen von Postgresql!

Leute,

Ich führe die unten angegebene Abfrage in zwei verschiedenen Servern aus, die unterschiedliche Versionen von Postgresql haben, die seltsame Ergebnisse liefern.

einzeln auswählen "D","E","A","B","F","C","G","H","I","J","K","L" aus ABC wobei "L"=1 Gruppe nach "D", "E", "A", "B", "F", "C", "G", "H", "I", "L" Ordnung nach "A", "B", "C";

Server1: db details->PostgreSQL 8.3.9 auf i486-pc-linux-gnu, kompiliert mit GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2 AUSGABE DER ABFRAGE ERKLÄREN:

  Unique  (cost=16618.27..16884.84 rows=8202 width=71)
  Sort  (cost=16618.27..16638.78 rows=8202 width=71)
    Sort Key: "A", "B", "C", "D", "E", "F","G", "H", "I", J, K
     GroupAggregate  (cost=13296.68..16085.07 rows=8202 width=71)
           Sort  (cost=13296.68..13501.71 rows=82011 width=71)
                Sort Key: "A", "B", ""C"", "D", "E", "F", "G", "H", "I", "L"
                 Seq Scan on exims  (cost=0.00..3236.14 rows=82011 width=71)
                      Filter: ("L" = 1)                         

  Server2: db details->PostgreSQL 7.4.23 on x86_64-pc-linux-gnu, compiled by GCC cc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)

 EXPLAIN OUTPUT OF QUERY:
  Unique  (cost=22.73..22.90 rows=5 width=361)
   Sort  (cost=22.73..22.75 rows=5 width=361)
    Sort Key: "A", "B", "C", "D", "E", "F","G", "H", "I", J, K, "L"
      HashAggregate  (cost=22.65..22.67 rows=5 width=361)
            Seq Scan on exims  (cost=0.00..22.50 rows=5 width=361)
                Filter: ("L" = 1)

Für beide Server verwende ich dieselben Eingabetabellen mit 82011 Datensätzen, und die Ergebnisse sind Server1: Ausgabe dieser Abfrage -> 82011 Datensätze Server2: Ausgabe dieser Abfrage -> 53146 Datensätze

Soweit ich sehen kann, verwendet Server 2 die Hashaggregate-Methode, während Server 1 die Groupaggregate-Methode verwendet?

Kann mir jemand erklären, welchem Serverergebnis ich vertrauen sollte?

BR/ Vijay

4voto

Magnus Hagander Punkte 22152

Ich vermute, dass die Datenbanken in verschiedenen Gebietsschemata laufen. Vergleichen Sie die Ausgabe von

SHOW lc_collate;

für beide Datenbanken.

Es ist ein weit verbreiteter Fehler, diese bei der Aktualisierung eines Systems nicht auf die gleichen Werte zu setzen, was dazu führen kann, dass Optionen wie ORDER BY, DISTINCT und GROUP BY unterschiedliche Ergebnisse liefern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X