1

Temat: Różnice miedzy baza na windows'ie a na linux'ie

2

Odp: Różnice miedzy baza na windows'ie a na linux'ie

SHOW server_encoding ;
SHOW client_encoding ;

Ostatnio edytowany przez gszpetkowski (2011-05-30 17:47:18)

3

Odp: Różnice miedzy baza na windows'ie a na linux'ie

Funkcja jest wywoływana z poziomu php poleceniem

$sql = "select import.insert_file('" . $productName . "', '" . $this->fileInfo['markedFileName'] . "', 'c:/ftp/reports/" . $this->fileInfo['remotePaath'] . "');";

które jest dalej powinno przejść przez

        try {
            $resp = $db->fetchAll($sql);
            return true;
        } catch (Exception $e) {
            diee($e);
            return false;
        }

podczas gdy wynikiem jest wspomniany przeze mnie exeption. W samej funkcji faktycznie użyte jest zapytanie COPY ale nie tylko. Wszystko działa jednak poprawnie podczas odpytywania bazy stojącej na linuxie. Problem pojawia się podczas odpytywania bazy stojącej na windzie, stąd moje wszelkie podejrzenia idą w kierunku niewłaściwych LC_COLLATE i LC_CTYPE.

Zainstalowanego mam postgresa w wersji 9.0.4-1 i do administracji używam pgAdmin III. W związku z wywoływaniem tej funkcji z poziomu php i takim samym zwracaniem Exeption nie otrzymuje żadnego HINTa.

W wyniku zapytań o których wspomniałeś dostaję odpowiednio UTF-8 i UNICODE.

Ostatnio edytowany przez norris_85 (2011-05-27 09:32:19)

4

Odp: Różnice miedzy baza na windows'ie a na linux'ie

UNICODE jest to alias na UTF-8, więc pod tym względem się zgadza. Byłbyś w stanie przeprowadzić testowo import tego CSV bezpośrednio przez polecenie COPY w pgAdmin tzn. z pominięciem PHP ?

5

Odp: Różnice miedzy baza na windows'ie a na linux'ie

Jasne, że tak. Wszystko dzieje się w funkcji importu, już po wysłaniu pliku na serwer ftp, wiec przechwytując zapytanie dla konkretnego pliku i wywołując je bezpośrednio w pgAdminie otrzymałem:

QUERY:  COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER 
CONTEXT:  PL/pgSQL function "insert_file" line 45 at EXECUTE statement
ERROR:  invalid byte sequence for encoding "UTF8": 0xff
CONTEXT:  COPY import_tmp_table_depozyty, line 1
SQL statement "COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER "
PL/pgSQL function "insert_file" line 45 at EXECUTE statement

********** Błąd **********

ERROR: invalid byte sequence for encoding "UTF8": 0xff
Stan SQL:22021
Kontekst:COPY import_tmp_table_depozyty, line 1
SQL statement "COPY import.import_tmp_table_depozyty(col_1,col_2,col_3,col_4,col_5,col_6,col_7) FROM 'c:/ftp/reports/zasilenia/2011-05-30/I_DATA_DEPOZYTY_UROCZNIONE_1306710518.CSV' WITH DELIMITER '\t'  CSV ESCAPE '\\' HEADER "
PL/pgSQL function "insert_file" line 45 at EXECUTE statement

6

Odp: Różnice miedzy baza na windows'ie a na linux'ie

iconv -f UTF-8 -t UTF-8 plik.csv

Ostatnio edytowany przez gszpetkowski (2011-05-30 18:06:48)

7

Odp: Różnice miedzy baza na windows'ie a na linux'ie

Dzięki za pomoc, problem rozwiązany. Faktycznie kłopot sprawiało polecenie iconv które na potrzeby pracy pod windowsem zmieniłem z wywoływanego na shellu na wywoływane z php. Co dziwne polecenie to inaczej kodowało importowany plik. W wyniku czego sql dostawał krzaki i na nich się wywalał.

Temat do zamknięcia.