Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PostgreSQL] Dodawanie wielu rekordow
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
Pucy
Problem polega na tym ze chcialbym dodac w 1 zapytaniu n-rekordow;

w mysql: "INSERT INTO db(id,nazwa) VALUES ('2','xxx'),('3','ttt'),('5','uuuu')"; - dziala

jak osiagnac identyczny rezultac w postgresie? Czy jedynym rozwiazaniem jest tworzeni np. 10 tys zapytan? Bo o tym mowa...
sf
Musisz utworzyć 10 zapytań. Jak dobrze pamiętam to w wersji 8.2 ma być taka możliwość jak opisałeś.
Adiasz
Jezeli musisz wrzucic duzo insertow do bazy danych to duzo szybciej (pretkosc rosnie wykladniczo przy coraz wiekszej ilosci inertow) od INSERT dziala \copy z stdin
Przydaje sie to gdy przenosisz bazy, z tym ze w pg_dump musi byc bez opcji d i D
Pucy
Musicie mowic prosciej co to " \copy z stdin" i o jakie opcje chodzi? Duza ilosc zapytan, mowie o 10,20,50 tysiacach dodanych rekordow

Adiasz ale ja ta predkosc ma rosnac? psql wie ze dodaje kolejno w krotkim czasie nastepne insertu i na podstawie tego przyspiesza ich dodawanie. Ale musze wiec sprobowac z osobnymi zapytaniami. Wiem ze przy 10 tysiacach w mysql dodawalem ok 40 sekund... zobacze jak to w psql wyglada
Adiasz
W sumie nie wiem dlaczego dziala to szybciej, ale dziala i to znacznie.
>> manual

Kilkadziesac tysiecy to nie jest duzo (jak dla kogo oczywoscie) dla mnie duza baza to powiedzmy 2m rekordow.
Pucy
Hm, no w sumie, przeciez dodanie na raz ( w moim mniemaniu) to to samo co np przeniesienie bazy, a przeniesienie z 2m rekordow to oj oj smile.gif Dobra, wiec pojedynczymi insertami... bo w sumei ten efekt to tylko jednorazowy, ale chcialem wiedziec czy da sie zoptymalizowac dodawanie
woolfik
No to mam pytanie mam plik wlasnie gdzie sa bloki copy i mam np taki blok:
COPY umowy (idx_umowy, numer_umowy, idx_zakladu, lp, przedmiot_umowy, data_od, data_do) FROM stdin;
32 WWE123 10 100 BG - 12A Z 2007-01-01 2007-12-31
33 000/0A12 10 100 BZ - 12B Z 2007-01-01 2007-02-28
34 AB-WA00 10 100 BG - 11A Z 2001-01-01 2003-04-11
35 2009\9\\13 10 100 CZ - 13A Z 2007-01-01 2007-12-31
36 X11-AA 12 100 CZ - TZ 2007-01-01 2007-12-31
37 000/0A12 12 100 DZ - TZ 2008-01-01 2008-12-31
38 AB-WA00 12 100 EZ - TZ 2009-01-01 2007-12-31
39 2009\5\\22 12 100 DZ - TZ 2007-01-01 \N
40 000/1 15 100 Op. Zdr Basic 2008-03-01 \N
41 000/2 15 100 Op. Zdr Basic \N 2009-05-12
42 000/3 16 100 Op. Zdr Basic 2007-01-01 2007-12-31
\.

No i niestety baza zwraca query OK ale nie dodaje mi zadnego rekordu do bazy ... tabela jest dalej pusta ... mozecie cos doradzic questionmark.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.