1

Temat: plPGSQL - import danych z pliku tekstowego

Witam.
Potrzebuje napisać funkcję która będzie importowała dane z pliku tekstowego. Funkcja musi tez odpowiednio przetworzyć dane i dopiero potem wrzucić je do tabeli.
Z przetwarzaniem danych nie będę miał problemu. Jednak nie wiem jak dobrać się do pliku, otworzyć do odczytu i pobierać dane po wierszu (rekord). Dodam, że nie mam zbyt wiele doświadczenia z pl/pgsql.
Może ktoś z Was miał już podobny problem i wie jak to zaimplementować ?
Czekam na sugestie smile


Pozdrawiam
G

Postgres 8.4 | PHP 5.3 | Kubuntu 10.04

2

Odp: plPGSQL - import danych z pliku tekstowego

Pozdrawiam
Pawel Socha

3

Odp: plPGSQL - import danych z pliku tekstowego

plpgsql'em na pewno tym nie zrobisz. Bedziesz potrzebowal jakiegos jezyka niezaufanego np.
plpgsqlu, plperlu, C i kilka innych

4

Odp: plPGSQL - import danych z pliku tekstowego

no właśnie chyba COPY to nie bardzo jest rozwiazanie. Chodzi mi raczej o cos takiego.
Z poziomu procedury uzyskuje deskryptor pliku. Nastepnie otwieram go do odczytu i pobieram kolejne wiersze i je przetwarzam. Nie moge tego zrobic poleceniem kopy , bo dane w pluku nie do konca sa usystematyzowane i musze je przed wstawieniem obrobic.
rski co miales na mysli piszac ze plpgsqlem tego nie zrobie ,a za chwile sugerjsz min plpgsql ? literowka , czy przeoczenie ? wink

Postgres 8.4 | PHP 5.3 | Kubuntu 10.04

5

Odp: plPGSQL - import danych z pliku tekstowego

plpgsql jest jezykiem 'zaufanym' i nie daje możliwości dostępu do systemu plików.
plpgsqlu (i inne języki które kończą się na 'u' np plperlu, to języki 'niezaufane' z poziomu których możesz odwoływać się do systemu plików).
Kiedyś korzystałem z plpgsqlu i było spox, ale to było dawno temu smile.

6

Odp: plPGSQL - import danych z pliku tekstowego

Dzięki rski.
Naprowadziłeś mnie na rozwiązanie. Niestety piszą, że w wersji 8.4 nie ma untrusted plpgsql, ale za to jest plperlu. Muszę się tylko nauczyć troche perla smile
Wklejam fragment z dokumentacji (rozdzał 40.5)

CREATE FUNCTION badfunc() RETURNS integer AS $$
    my $tmpfile = "/tmp/badfile";
    open my $fh, '>', $tmpfile
        or elog(ERROR, qq{could not open the file "$tmpfile": $!});
    print $fh "Testing writing to a file\n";
    close $fh or elog(ERROR, qq{could not close the file "$tmpfile": $!});
    return 1;
$$ LANGUAGE plperl;

Może sie komuś przyda .
Pozdrawiam

Postgres 8.4 | PHP 5.3 | Kubuntu 10.04

7

Odp: plPGSQL - import danych z pliku tekstowego

Ano w perlu wszystko się da tongue

Jak coś to pisz, ostatnio pociągałem dane z MySQLa do Pg właśnie dzięki perlowi ;]

Ostatnio edytowany przez psocha (2009-11-11 20:17:18)

Pozdrawiam
Pawel Socha

8

Odp: plPGSQL - import danych z pliku tekstowego

no to się zaczeły schody wink
Nie wiem jak zainstalować PG z plperlem ?
Podczas instalacji mam okno wyboru jezykow proceduralnych i wszystkie poza pgsql-em sa nieaktywne. Czy najpierw musze zainstalwoac samego perla ? czy moze wybralem zla wersje instalatora ? Instalwałem z 8.3.5 Szperalem troche po googlach, ale nie trafilem na odpowiedź

Ostatnio edytowany przez Gaza (2009-11-13 18:47:22)

Postgres 8.4 | PHP 5.3 | Kubuntu 10.04

9

Odp: plPGSQL - import danych z pliku tekstowego

Tak perl musi byc zainstalowany
Postgresa masz z paczki czy z kompilowany?

Pozdrawiam
Pawel Socha