Copy und lokale (Windows) Datei

Fragen und Probleme rund um die Abfragespache SQL.

Copy und lokale (Windows) Datei

Beitragvon pgSteffen » Mo 23. Jul 2012, 10:27

Hallo Wissende,
schon wieder bin ich unerwartet auf ein Problem gestoßen:

Mittels
Code: Alles auswählen
COPY  tmp_imp FROM 'd:/tar/import.txt'  WITH DELIMITER ' ';
-- bzw.
COPY  tmp_imp to 'd:/tar/import.txt'  WITH DELIMITER ' ';
Importiere/Exportiere ich eine Textdatei.

In meiner Testumgebung lief der pgServer ja als "localhost". Ja und jetzt wollte ich den richtigen Server nutzen :( .

Die Datei für Copy wird (wohl) auf dem Rechner gesucht, wo der PGServer läuft.
Wie kann ich auf eine Datei am Client zugreifen?
Mit StdIn/StdOut kann ich in dem Zusammenhang nicht so recht was anfangen.

Vielen Dank für eure Mühe.

EDIT:
Erst denken dann fragen :schäm:.
Ich kann ja per "richtigem" (VB-Code) die Datei hinkopieren bzw. von dort holen.

Könnte man eigentlich das Tablespace-Verzeichnis dafür nutzen oder empfiehlt sich das nicht?
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46

Beitragvon akretschmer » Mo 23. Jul 2012, 10:33

pgSteffen hat geschrieben:
Die Datei für Copy wird (wohl) auf dem Rechner gesucht, wo der PGServer läuft.
Wie kann ich auf eine Datei am Client zugreifen?
Mit StdIn/StdOut kann ich in dem Zusammenhang nicht so recht was anfangen.

Vielen Dank für eure Mühe.


Aus der Hilfe von psql:

Code: Alles auswählen
Input/Output
  \copy ...              perform SQL COPY with data stream to the client host


Andreas
--
ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)

https://www.xing.com/profile/Andreas_Kretschmer7
Hosting-Provider mit PostgreSQL-Support gesucht? Mich fragen!
akretschmer
Erfahrener Benutzer
 
Beiträge: 5937
Registriert: So 29. Okt 2006, 14:35
Wohnort: Kaufbach, Sachsen, Germany, Germany

Beitragvon castorp » Mo 23. Jul 2012, 10:38

pgSteffen hat geschrieben:Wie kann ich auf eine Datei am Client zugreifen?
Indem Du den psql Befehl \copy verwendest

Aus dem Handbuch:
The fine manual hat geschrieben:\copy invokes COPY FROM STDIN or COPY TO STDOUT, and then fetches/stores the data in a file accessible to the psql client.


COPY über stdin würde in etwa so aussehen:
[code]COPY person (id, firstname, lastname) FROM stdin]Das ist das Format welches pg_dump erstellt.
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
castorp
Erfahrener Benutzer
 
Beiträge: 673
Registriert: Sa 27. Jun 2009, 22:24

Beitragvon pgSteffen » Mo 23. Jul 2012, 10:45

pgSteffen hat geschrieben:EDIT:
Erst denken dann fragen :schäm:.
Ich kann ja per "richtigem" (VB-Code) die Datei hinkopieren bzw. von dort holen.
Ihr antwortet ja schneller als ich denke ;)
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46

Beitragvon pgSteffen » Mo 23. Jul 2012, 11:38

Hallo,
ich muss leider noch mal nachhaken.

Ich komme mit den Antworten trotz der Beispiele nicht so recht klar.

Ich starte im Moment über ADO folgenden SQL-Code:
Code: Alles auswählen
COPY tmp_exp to 'd:/tar/export.txt'  WITH DELIMITER ' ';
Damit wird eine Datei auf dem Server der DB erzeugt.
Wie muss der Code lauten, dass die Datei am Clientrechner erzeugt wird.
Code: Alles auswählen
\COPY tmp_exp to 'd:/tar/export.txt'  WITH DELIMITER ' ';
So einfach ist es ja doch nicht, denn das erzeugt ja einen Sysntaxfehler

Entschuldigung, aber irgendwie bin ich schwer von Begriff ...
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46

Beitragvon castorp » Mo 23. Jul 2012, 11:45

pgSteffen hat geschrieben:Wie muss der Code lauten, dass die Datei am Clientrechner erzeugt wird.
\copy statt copy

Allerdings ist die Syntax etwas anders: PostgreSQL: Documentation: 9.1: psql
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
castorp
Erfahrener Benutzer
 
Beiträge: 673
Registriert: Sa 27. Jun 2009, 22:24

Beitragvon pgSteffen » Mo 23. Jul 2012, 11:55

Hallo,
danke für die schnelle Antwort. Aber ich vermute ich habe euch mein Problem noch nicht deutlich machen können.

Ich nutze ganz "normal" SQL-Abfrage über ADO (zum Testen im Moment im pgAdmin) und da kann ich nicht einfach ein Backslash voranstellen, denn das gibt Syntaxfehler.
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46

Beitragvon castorp » Mo 23. Jul 2012, 12:00

pgSteffen hat geschrieben:Ich nutze ganz "normal" SQL-Abfrageb über ADO
Das hättest Du gleich sagen sollen. \copy ist ein Befehl in psql kein "richtiger" SQL Befehl.

Über eine Programmiersprache bleibt Dir entweder nur die Möglichkeit die Datei auf den Server zu kopieren oder eben mit COPY FROM STDIN zu arbeiten (falls das mit VBA geht - der JDBC Treiber z.B. unterstützt es nämlich nicht).
A SQL query walks into a bar and sees two tables. He walks up to them and says 'Can I join you?'
castorp
Erfahrener Benutzer
 
Beiträge: 673
Registriert: Sa 27. Jun 2009, 22:24

Beitragvon pgSteffen » Mo 23. Jul 2012, 12:14

Hallo,
Dank für die schnelle Antwort.
Das hätte ich mir eigentlich denken müssen, dass das so nicht gehen kann.
Ich bin nur durch die vielen pSQL-Beispiele auf die falsche Spur gekommen.

Naja dann wird's halt etwas "unschön", denn ich denke nicht, dass ich per ODBC die Daten "transportieren" kann.

Gruß Steffen
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46

TableSpace als Datenaustauschverzeichnis

Beitragvon pgSteffen » Di 24. Jul 2012, 07:16

Guten Morgen ihr fleißigen Helfer,
ich muss noch mal kurz nachhaken:
"Steffen hat geschrieben:Könnte man eigentlich das Tablespace-Verzeichnis dafür nutzen oder empfiehlt sich das nicht?
Könnte ich in diesem Verzeichnis einen Unterordner erstellen und dort die temporären Dateien zum Datenaustausch lokaler Rechner/Server hinlegen oder komme ich da Postgres in die Quere?

Gruß Steffen
pgSteffen
Neuer Benutzer
 
Beiträge: 26
Registriert: Di 14. Dez 2010, 10:46


Zurück zu SQL

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron