You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 9.6与12同查询排序结果不同,求统一方案

PostgreSQL 9.6与12查询结果排序不一致的修复方案

问题场景

执行以下查询语句:

SELECT current_database(),table_name
  FROM information_schema.tables
 WHERE table_type = 'BASE TABLE'
   AND table_schema NOT IN ('pg_catalog', 'information_schema') 
ORDER BY table_name;
  • PostgreSQL 9.6输出结果:
    current_database |          table_name          
    ------------------+------------------------------
    mydb              |key_request_sum
    mydb              |key_req_user
    
  • PostgreSQL 12输出结果:
    current_database  |          table_name          
    ------------------+------------------------------    
    mydb              |key_req_user
    mydb              |key_request_sum
    
    

原因分析

PostgreSQL不同版本中,字符串排序依赖的**排序规则(Collation)**默认值存在差异。早期版本(如9.6)通常默认使用C排序规则(按字节值排序),而较新版本(如12)可能默认采用系统locale对应的字典序排序规则,导致相同字符串的排序结果出现差异。

修复方法

修改查询的ORDER BY子句,明确指定与PostgreSQL 9.6一致的C排序规则,强制按字节值排序:

SELECT current_database(),table_name
  FROM information_schema.tables
 WHERE table_type = 'BASE TABLE'
   AND table_schema NOT IN ('pg_catalog', 'information_schema') 
ORDER BY table_name COLLATE "C";

修改后,PostgreSQL 12的查询结果排序会与9.6版本完全一致。

内容的提问来源于stack exchange,提问作者usersam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:24:24