Opis kompilacji i instalacji serwera bazy danych PostgreSQL z obsługą polskich znaczków. instalację przeprowadziłem na systemie linux Slackware, ale dla innych będzie tak samo. 1) ściągamy aktualne źródła postgresa (http://www.postgresql.org) i rozpakowujemy [root@trabant]#gzip -d postgresql-7.2.2.tar.gz ; tar xvf postgresql-7.2.2.tar ; cd postgresql-7.2.2 2) przygotowanie do kompilacji - odpalamy configure z odpowiednimi parametrami [root@trabant]#./configure --prefix=/usr/local/postgresql-7.2.2 --enable-locale --enable-multibyte=LATIN2 3) następnie kompilacja i instalacja [root@trabant]# make && make install 4) jeśli jeszcze tego nie zrobiłeś, to stwórz użytkownika i grupę postgres 5) tworzymy katalog data, którego właścicielem jest user i grupa postgres [root@trabant]# mkdir /usr/local/postgresql-7.2.2/data [root@trabant]# chown postgres.postgres /usr/local/postgresql-7.2.2/data [root@trabant]# chmod 750 /usr/local/postgresql-7.2.2/data 7) ustawiamy locale na PL dla usera postgres - WAŻNE! Do pliku ~postgres/.bash_profile wpisujemy : export LC_COLLATE=pl_PL export LC_CTYPE=pl_PL export LC_MESSAGES=pl_PL export LC_MONETARY=pl_PL export LC_NUMERIC=pl_PL export LC_TIME=pl_PL 8) logujemy się jako użytkownik postgres (albo bezpośredno na nową konsolę albo przez su -l, samo "su postgres" NIE wystarczy, bo nie będą działać locale ! [root@trabant]# su - postgres [postgres@trabant]$ 9) sprawdzamy czy działają poprawnie locale. Najprościej sprawdzić perlem : [postgres@trabant]$perl -v This is perl, v5.6.0 built for i686-linux Copyright 1987-2000, Larry Wall Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5.0 source kit. Complete documentation for Perl, including FAQ lists, should be found on this system using `man perl' or `perldoc perl'. If you have access to the Internet, point your browser at http://www.perl.com/, the Perl Home Page. [postgres@trabant]$ 10) Jeśli perl -v nie zgłosi żadnego błędu o localach to możemy przystąpić do stworzenia katalogu bazy : [postgres@trabant]$/usr/local/postgresql-7.2.2/bin/initdb -D /usr/local/postgresql-7.2.2/data 11) jeśli wszystko przebiegło OK, to możemy uruchomić postgresa. Stworzyć, lub zaimportować istniejącą bazę i sprawdzić czy działa sortowane z polskimi znakami. Najprościej stowrzyć tabelę z nazwiskami i wpisać do niej nazwisko zaczynające się od "polskiej litery" (np. Ćma ;) i sprawdzić przykładowe zapytanie: select * from tabela where nazwisko ilike 'ćma'; Zakładając że w bazie wpisane jest Ćma (duża litera Ć) i powyższe zapytanie znajdzie rekord, to znaczy że sortowanie działa nam OK ;-) 12) na koniec możemy stowrzyć sobie skrypt startujący dla Postgresa, u mnie wygląda on tak: [root@trabant]#cat /etc/rc.d/rc.postgresql #!/bin/sh if [ "$1" = "stop" ] ; then if [ -f "/usr/local/postgresql-7.2.2/data/postmaster.pid" ]; then rm /usr/local/postgresql-7.2.2/data/postmaster.pid fi echo "zatrzymuję Postgresa..." skill -9 postgres fi if [ "$1" = "start" ] ; then if [ -f "/usr/local/postgresql-7.2.2/data/postmaster.pid" ]; then rm /usr/local/postgresql-7.2.2/data/postmaster.pid fi echo "startuję Postgresa..." /usr/sbin/su - postgres -c " /usr/local/postgresql-7.2.2/bin/postmaster -i -S -D /usr/local/postgresql-7.2.2/data " fi if [ `ps aux |grep postgres|grep -v grep|wc -l` -ge 1 ] ; then echo "PostgreSQL załączony !" else echo "PostgreSQL wyłączony !" fi ------------------------------------------------------------------------------------ Czasami zdarza się, że pomimo poprawnego wykonania w/w punktów postgres dalej "nie widzi" poprawnie polskich znaków. Najczęstrzą przyczyną są chyba źle ustawione locale dla użytkownika postgres, albo brak odpowienich plików w systemie (u mnie właśnie brakowało plików...) Przede wszystkim sprawdź perlem czy nie zgłasza błędu (perl -v), np. takiego jak tutaj: [postgres@trabant]$perl -v |grep -i local perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_MESSAGES = "pl_PL", LC_TIME = "pl_PL", LC_NUMERIC = "pl_PL", LC_CTYPE = "pl_PL", LC_MONETARY = "pl_PL", LC_COLLATE = "pl_PL", LANG = (unset) are supported and installed on your system. perl: warning: Falling back to the standard locale ("C"). Jeśli perl zgłasza błąd to na pewno coś jest nie tak z localami i tutaj szukaj błędu. Sprawdź w /usr/share/locale/ czy jest katalog pl_PL i odpowiednie pliki : [root@trabant]#find /usr/share/locale/pl_PL/ /usr/share/locale/pl_PL/ /usr/share/locale/pl_PL/LC_MESSAGES /usr/share/locale/pl_PL/LC_MESSAGES/SYS_LC_MESSAGES /usr/share/locale/pl_PL/LC_COLLATE /usr/share/locale/pl_PL/LC_CTYPE /usr/share/locale/pl_PL/LC_MONETARY /usr/share/locale/pl_PL/LC_NUMERIC /usr/share/locale/pl_PL/LC_TIME u mnie ich nie było, przez co straciłem 3h i postanowiłem napisać HOW-TO ! w razie czego szukaj na googlu, możesz też zamailować, jeśli będę w stanie to pomogę ;) ^marek/(o)\rojcanet/(-)pl$