데비안에서 Postgres 9.4.4를 실행 중이며 다음과 같은 ORDER BY
동작 이 나타납니다 .
veure_test=# show LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 row)
veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1;
regexp_split_to_table
-----------------------
a
A
b
c
Capacitor
CD
d
D
(8 rows)
그리고 uname -a
:
Linux ---- 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1 x86_64 GNU/Linux
그러나 Postgres 9.3.4를 사용하는 iMac에서 다음을 얻습니다.
veure_test=# show LC_COLLATE;
lc_collate
-------------
en_US.UTF-8
(1 row)
veure_test=# SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') ORDER BY 1;
regexp_split_to_table
-----------------------
A
CD
Capacitor
D
a
b
c
d
(8 rows)
그리고 uname -a
:
Darwin ---- 14.4.0 Darwin Kernel Version 14.4.0: Thu May 28 11:35:04 PDT 2015; root:xnu-2782.30.5~1/RELEASE_X86_64 x86_64
데비안 버전이 대소 문자를 구분하지 않고 OS X 버전이 아닌 이유가 궁금합니다. 무엇을 놓치거나 다른 정보를 제공해야합니까?
업데이트 : 내 Mac에서 pg_collation
테이블에 en_US.UTF-8
데이터 정렬이 있지만 데비안에서는 en_US.utf8
데이터 정렬이 있습니다. 따라서 내 Mac에서 :
veure_test=# with foo as (
SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') as bar
)
SELECT bar FROM foo
ORDER BY bar collate "en_US.UTF-8";
bar
-----------
A
CD
Capacitor
D
a
b
c
d
(8 rows)
그리고 데비안에서 :
veure_test=# with foo as (
SELECT regexp_split_to_table('D d a A c b CD Capacitor', ' ') as bar
)
SELECT bar FROM foo
ORDER BY bar collate "en_US.utf8";
bar
-----------
a
A
b
c
Capacitor
CD
d
D
(8 rows)
그래서 en_US.UTF-8
및 en_US.utf8
다른 정렬 순서가?
같은 결과입니다. 다른 소식으로 OS X에는
—
Curtis Poe
select * from pg_collation
데비안 박스가 en_US.utf8
있고, OS X에는 en_US.UTF-8
. 그것들을 사용하여 각각의 박스에 명시 적으로 데이터 정렬을 강제하는 것은 다른 정렬 순서를 보여줍니다 :(
그리고 나는 문제를 설명 할 수있는 업데이트를 게시했지만 나에게 그것은 단지 미스터리를 심화시킵니다. 그리고 나는 이것을 발견했다 : stackoverflow.com/questions/19967555/… 그리고 이것 : stackoverflow.com/questions/27395317/…
—
Curtis Poe
불행히도 Postgres는 OS의 데이터 정렬 구현을 사용하여 OS에 의존하는 이러한 종류의 동작을 만듭니다 (개인적으로 버그로 간주됩니다-DBMS는 OS에 관계없이 동일하게 작동해야 함). 이 데비안와 OSX의 시스템 라이브러리의 차이로 귀결 그래서
—
a_horse_with_no_name
정렬 순서가 나머지 순서와 일치하지 않으면 Postgres와 시스템의 다른 부분 사이에 불일치가 있습니다. 나도 동일한 행동을 선호하지만 시스템 로케일을 따르는 버그라고 부르지 않을 것입니다. 궁극적으로 동일한 로케일이 OS에서 동일하게 작동해야합니다. 데비안 로케일이 오른쪽으로 보인다 (다른 설명이없는 한), 애플은 잘못이 될 것으로 보인다.
—
Erwin Brandstetter
'D d a A c b CD Capacitor'
이text
필드 로 캐스트되지 않을 가능성이 있습니까? IE,SELECT regexp_split_to_table('D d a A c b CD Capacitor'::text, ' ') ORDER BY 1;
어떤 일이 일어나고 있는지 보십시오 .