один и тот же запрос дает разные результаты в разных версиях postgresql! - PullRequest
1 голос
/ 26 июня 2010

Народ,

Я выполняю приведенный ниже запрос на двух разных серверах, которые имеют разные версии postgresql, которые дают странные результаты.

выберите различные "D", "E", "A"," B "," F "," C "," G "," H "," I "," J "," K "," L "из ABC, где" L "= 1 группа по" D ", «E», «A», «B», «F», «C», «G», «H», «I», «L» - порядок «A», «B», «C»;

Сервер1: подробности db-> PostgreSQL 8.3.9 на i486-pc-linux-gnu, скомпилированный GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2 ОБЪЯСНИТЕ ВЫХОД ЗАПРОСА:

  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)

для обоих серверов, которые я использую, одни и те же входные таблицы с записями 82011 и результаты: server1: вывод этого запроса -> 82011 записей server2: вывод этого запроса -> 53146 записей

что, как я вижу на сервере 2, использует метод Hashaggregate, а server1 использует groupaggregate?

Может кто-нибудь объяснить, какому результату сервера я должен доверять?

BR / Vijay

1 Ответ

2 голосов
/ 28 июня 2010

Я думаю, что базы данных работают в разных локалях.Сравните выходные данные

SHOW lc_collate;

в обеих базах данных.

Довольно распространенная ошибка - не устанавливать их одинаковыми при обновлении системы, что может привести к таким опциям, как ORDER BY, DISTINCTи GROUP BY для доставки различных результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...