2010-06-26 164 views
1

民间,在不同版本的postgresql中给出不同结果的相同查询!

我在两个不同的服务器中运行给出下面的查询,它有不同版本的postgresql,这给出了奇怪的结果。 D,E,A,B,F,C,G,H,I,J,K, ,“L” ,其中“L”= 1 组由“D”,“E”,“A”,“B”,“F”,“C”,“G”,“H” I“,”L“ 按”A“,”B“,”C“排序;

服务器1:分贝详情 - >上的i486-PC-Linux的GNU,通过GCC GCC-4.3.real编译的PostgreSQL 8.3.9(Debian的4.3.2-1.1)4.3.2 EXPLAIN QUERY输出:

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个记录 服务器2:该查询的输出 - > 53146个记录

为为我可以在服务器2中看到使用Hashaggregate方法,而server1使用groupaggregate?

有人可以解释哪一个是我应该信任的服务器结果?

BR/ 维杰

+1

您可以发布一个最小且完整的示例来重现您看到的内容,以便我们也可以为自己运行吗?创建一个最小的示例尽可能多地从查询中删除表和列中的行,同时保留查询结果仍然不同。为了使您的示例完整,请发布create table语句和insert语句。 – 2010-06-26 15:11:05

+0

只显示真正的解释分析输出。您显示了查询的输出,其中第一个返回8202行,第二个返回5行。 – 2010-06-26 18:47:36

+0

您的服务器1返回所有记录。两台服务器上的所有行都有“L”= 1吗?你可以发布'解释分析'输出,而不是简单的'解释'。 – Tometzky 2010-06-28 13:39:24

回答

2

我的猜测是,该数据库在不同的语言环境中运行。比较两个数据库上的

SHOW lc_collate; 

的输出。

这是一个相当常见的错误,在升级系统时不会将它们设置为相同,这会导致像ORDER BY,DISTINCT和GROUP BY这样的运算来提供不同的resulst。

+0

你是对的马格努斯,对于这两个服务器显示不同的语言环境 – Vijay 2010-07-02 13:54:05

相关问题