PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : postgres copy



Huhn Hur Tu
27.12.12, 14:24
Hallo zusammen,

ich habe hier eine lokale Postgres stehen auf der ich einige Millionen Datensaetze importieren muss, da das als normales script nicht so schnell geht will ich copy verwenden.
Copy darf ich scheinbar nur als superuser verwenden wenn es mit Dateien arbeitet.

Weiss jemand wie ich mir die Rechte dafuer gebe um mit Dateien copy zu verwenden oder einen anderen Weg 17 Millionen Datensaetze zeitnah zu importieren.

Bisher habe ich unter sybase nur mit bcp zu tun gehabt, da ist das ganz easy.

so sollte hoffentlich die Syntax aussehen


copy cm_tech from '/home/skelemen/geraffel/appop-1301/vertragids';


Fuer Ids die ohne Header folgendermassen als Liste aussehen.



41906581
41906584
41906586
41906593
41906594
41906597
41906601
41906604
41906605
41906609



Gruss Stefan

nopes
28.12.12, 20:16
Hmm dachte immer copy hätte keine besonderen Rechte, da es eh kein echtes SQL ist.
Aus der Doku (http://www.postgresql.org/docs/8.1/static/sql-copy.html):
Files named in a COPY command are read or written directly by the server, not by the client application. Therefore, they must reside on or be accessible to the database server machine, not the client. They must be accessible to and readable or writable by the PostgreSQL user (the user ID the server runs as), not the client. COPY naming a file is only allowed to database superusers, since it allows reading or writing any file that the server has privileges to access.

Also sorge dafür das der Nutzer mit dem der Dienst läuft, entsprechende Zugriff hat...

Alternativ schreibe es in SQL um, nutze aber ein insert anstatt vielen, die Werte können durch ein komma getrennt werden:
INSERT INTO foo (id, bar) VALUES
(1, 'bla1'),
(2, 'bla2');

Huhn Hur Tu
29.12.12, 11:18
Danke nopes,

das mit dem in SQL umwandeln, da haette ich auch selbst drauf kommen koennen.

Die Sache mit Copy verstehe ich jetzt so dass der Quellfile "postgre" User Rechte benoetigt?


Gruss Stefan

nopes
29.12.12, 18:17
Die Sache mit Copy verstehe ich jetzt so dass der Quellfile "postgre" User Rechte benoetigt? Falls es dich beruhigt, so verstehe ich das auch.

Wegen des zusammenfassen der Statements, kann sein, dass du bei so vielen Datensätzen ans Limit kommst; Stichwort track_activity_query_size (http://www.postgresql.org/docs/9.0/static/runtime-config-statistics.html). Entweder erhöhen, oder aber Länge beachten und bei bedarf schließen und ein neues öffnen - aus eigener Erfahrung bau eher mehr als wenig LFs(\n) ein, macht das Fehler finden wesentlich leichter...