| 포스트그레SQL | ||
|---|---|---|
| 이전 | 19장. 런타임 환경 | 다음 |
러시아 모스크바에 있는 회사에서 프로젝트를 진행하던 중, postgresql이 지원하지 않는 문제가 발생했습니다. 국가 알파벳. 가능한 해결 방법을 찾은 후 로케일 지원을 직접 개발하기로 결정했습니다. 나는 C 프로그래머가 아니다 하지만 제가 일할 때 이미 로캘 프로그래밍에 대한 경험이 있었습니다. Perl(디버깅)과 엿보기를 사용합니다. 며칠간의 발굴 끝에 Postgres 소스 트리를 통해 나는 아주 사소한 수정을 했습니다. src/backend/utils/adt/varlena.c 및 src/backend/main/main.c 및 가져오기 나에게 필요한 것! LC_CTYPE, LC_COLLATE만 지원했는데, 나중에 다른 사람들이 LC_MONETARY를 추가했습니다. 나한테서 많은 메시지를 받았어 사람들이 이 패치에 대해 궁금해서 개발자들에게 보내기로 결정했고 (놀랍게도) postgresql 배포판에 통합되었습니다.참고:Oleg Bartunov 작성. 참조올렉의 웹페이지용 로케일 및 러시아어에 대한 추가 정보 지원합니다.
사람들은 종종 로케일이 자신에게 적합하지 않다고 불평합니다. 거기 몇 가지 일반적인 실수는 다음과 같습니다.
컴파일하기 전에 postgresql을 제대로 구성하지 않았습니다. 당신 로케일을 활성화하려면 --enable-locale 옵션과 함께 구성을 실행해야 합니다. 지원. 시작할 때 환경을 올바르게 설정하지 않았습니다. 우체국장. 환경 변수 $LC_CTYPE을 정의해야 하며 백엔드가 postmaster를 실행하기 전에 $LC_COLLATE를 가져옵니다. 환경의 로케일에 대한 정보. 나는 다음을 사용합니다 쉘 스크립트(runpostgres):
#!/bin/sh
LC_CTYPE=koi8-r 내보내기
LC_COLLATE=koi8-r 내보내기
postmaster -B 1024 -S -D/usr/local/pgsql/data/ -o '-Fe'그리고 rc.local에서 다음과 같이 실행하세요./bin/su - postgres -c "/home/postgres/runpostgres"
OS에서 깨진 로케일 지원(예: OS의 로케일 지원) Linux의 libc는 여러 번 변경되었으며 이로 인해 문제가 많다). 최신 Perl은 로케일도 지원합니다. 로케일이 손상되었습니다. perl -v는 다음과 같은 메시지를 표시합니다. 8:17[미라]:~/WWW/postgressetenv LC_CTYPE not_exist 8:18[mira]:~/WWW/postgresperl -v perl: 경고: 설정 로케일에 실패했습니다. perl: 경고: 로케일을 확인하세요. 설정: LC_ALL = (설정되지 않음), LC_CTYPE = "존재하지 않음", LANG = (설정되지 않음)이 시스템에 지원되고 설치됩니다. 펄: 경고: 표준 로케일("C")로 대체됩니다.
범퍼카 토토 파일의 위치가 잘못되었습니다! 가능한 위치:/usr/lib/범퍼카 토토(리눅스, 솔라리스),/usr/share/locale(리눅스),/usr/lib/nls/loc(DUX 4.0) 다음에 대한 man 로케일을 확인하세요. 올바른 장소. Linux에서는 다음 사이에 심볼릭 링크를 만들었습니다./usr/lib/범퍼카 토토그리고/usr/share/locale다음 libc가 그렇지 않을 것임을 확인하기 위해 내 로케일을 깨뜨려보세요.
문자열에 ~* 및 order by 연산자를 사용할 수 있습니다. 국가 알파벳의 문자. 영어가 아닌 사용자는 확실히 그게 필요해. 범퍼카 토토을 사용하지 않으려면 USE_LOCALE 정의를 해제하세요. 변수.
범퍼카 토토 사용에는 한 가지 분명한 단점이 있습니다. 바로 속도입니다! 그래서, 꼭 필요한 경우에만 범퍼카 토토을 사용하세요.
| 이전 | 집 | 다음 |
| 런타임 환경 | 위로 | 시작 우체국장 |