2009-01-18 7 views
2

PostgreSQL에서 "encoding = 'UTF8'"을 사용하여 데이터베이스를 만들고 일부 UTF8 데이터를로드했습니다. 선택은 잘 작동하지만 내가 쿼리에서 "WHERE UPPER (이름) = 'FOO'을"는 작업을 수행 할 때, 나는 내 연구는 PostgreSQL을 설치했기 때문에이 있음을 나타내는 것으로 보인다왜 PostgreSQL 데이터베이스에서 "upper()"를 수행 할 수 없습니까?

ERROR: invalid multibyte character for locale 

오류를 얻을 "initdb"는 LANG=en_US.UTF8 대신 LANG=en_US으로 처리되었습니다. "SHOW LC_COLLATE"이라고 표시하면 "en_US"이 표시됩니다. 필자는 모든 데이터베이스를 덤프하고 다시 만들고 싶지는 않습니다. PostGIS 중 일부는 PostGIS이고 그 중 일부는 다시 작성해야하기 때문에입니다. UTF8에서 작동하는 "UPPER"와 동등한 작업을 수행 할 수있는 방법이 있습니까?

업데이트 나는 덤프, reinitdb을하고 결국, 데이터베이스의 복원, 그리고 내가 데이터를 이동하기로 한 곳은 파악 약간의 문제를 제외하고, 생각했던 것보다 덜 고통스러운했다 왜냐하면 postgres 사용자는 PGDATA 환경 변수를 설정하지 않기 때문에 내가 찾을 수있는 설정 파일이나 쉘 스크립트도 없습니다.

답변

1

원하는 해결 방법이 가능하지 않지만 PostGIS 사용 데이터베이스의 덤프 및 복원이 올바르게 작동해야합니다. PostGIS 기능과 데이터로 기하 객체를 사용하여 데이터베이스를 정기적으로 덤프하고 복원합니다.

어떤 종류의 문제가 있습니까?

+0

문제는 내가 pg_dumpall을 수행 할 때, 그리고 나서, 중복 된 함수 정의에 대해 불평하기 시작합니다. –

+0

미래의 독자를위한 메모입니다. 스키마를 덤프하고 기존 스키마를 오버로드했기 때문에 가능성이있었습니다. 실제로 필요한 모든 것이 데이터 덤프/복원 (pg_dumpall이 아닌 pg_dump). y는, 당신이 언급 한 것처럼, 정말 덤프/initdb/복원 갈 방법이었다. – xzilla

1

진단 결과가 올바르지 만 PostgreSQL의 유니 코드와 관련된 일반적인 문제입니다. 설치 절차가 현명 해지고 그것을 실행하는 쉘의 로케일로 initdbed되었습니다 :-(

당신이 데이터베이스를 덤프하고 복구 할 수 없다면 문제가 더욱 심각하고 긴급합니다. IMHO, PostgreSQL의 새 버전이 발행 된 후 (또는 하드 디스크 오류 후) 실제로 데이터를 복원해야하기 전에이 문제를 먼저 해결해야합니다.

관련 문제