2016-06-20 3 views
3

Ich versuche, Daten von Postgres in CSV zu exportieren, so dass ich es stormpath importieren können, die benötigt werden:Wie können exportierte Daten von Postgres in verschiedene Registerkarten im CSV-Format getrennt werden?

„Es ist auch die CSV-Datei erfordert Spalten haben:

  • Benutzername
  • E-Mail
  • GIVEN_NAME
  • Nachnamen
  • custom_data

Die CSV-Datei muss Komma-getrennte Felder enthalten und die Felder mit einem Pipe-Zeichen |. "

Bisher kann ich die Daten von Postgres exportieren, aber ich bin nicht in der Lage, die Daten über mehrere Tabs mit einem '|' als Begrenzer.

Trennt Daten mit einem nicht sichtbaren ‚‘ als Trennzeichen und spreizt die Daten über die Laschen in ihren jeweiligen Schlüssel

\COPY (SELECT * FROM servicers) TO '/Users/V/Desktop/s.csv' DELIMITER ',' CSV HEADER; 

Trennt Daten mit ‚|‘ als Trennzeichen, sondern alle Daten in einem Register hält als auf einzelnen Registerkarten

\COPY (SELECT * FROM servicers) TO '/Users/V/Desktop/s.csv' DELIMITER '|' CSV HEADER; 

Antwort

1

Die Regeln gegen Sie zitieren sind:

Es erfordert die CSV-Datei durch Komma getrennte Felder zu haben, und Felder mit einem Rohr zitiert Zeichen |.

Aber Ihre Beispiele basteln nur mit dem Trennzeichen, nicht mit dem Anführungszeichen.

Probieren Sie etwas wie

COPY servicers TO '/Users/V/Desktop/s.csv' WITH (FORMAT CSV, HEADER, QUOTE '|'); 

FORMAT CSV impliziert DELIMITER ',', so dass die erste Anforderung erfüllen sollte. QUOTE '|' sollte die zweite erfüllen.

+0

Hallo vielen Dank für Ihre Hilfe, aber dies zitiert die Daten nicht mit '|' oder irgendwas. Ich werde ein Bild unter –

0

this is what appears now

das ist, was jetzt erscheint, obwohl ich den Code oben

COPY Servicer TO '/Users/V/Desktop/s.csv' MIT (FORMAT CSV, STECKER, QUOTE verwendet '|');

+0

posten Da die Felder 'is_signed_up',' email', 'hash' und' account_type' korrekt zu importieren scheinen, vermute ich, dass Ihr Problem möglicherweise mit Ihren Daten und nicht mit dem Exportprozess zusammenhängt. Wenn Sie '' von Servicern mit der ID '36' aus der 'psql'-Befehlszeile auswählen, was bekommen Sie? – jmelesky

+0

Das Ergebnis ist auf dem Bild unten. Es ist das gleiche wie im Bild oben –

+0

Anstatt "COPY" zu verwenden, um eine Datei zu erstellen und zu importieren, versuchen Sie, die Daten nur von der 'psql'-Befehlszeile aus zu betrachten. Ich vermute stark, dass zum Beispiel für ID 36 "name" das "e" ist und die Telefonnummer "n" ist. Das heißt, ich habe den starken Verdacht, dass Sie Ihre Daten korrekt exportieren und dass Sie nur sporadische Daten haben. – jmelesky

0

enter image description here

das ist das Ergebnis von \ COPY (select * from Servicer where id = 36) auf '/Users/V/Desktop/nw.csv' MIT (FORMAT CSV, STECKER, QUOTE '|');

0

Je nachdem, welche Version von Postgres Sie verwendeten, sollten Sie in der Lage sein, es so zu tun:

\copy (select * from tester) to '/tmp/test.csv' with delimiter '|' csv header force quote * 

dies die richtigen Trennzeichen verwenden, und Anführungszeichen.Sie können weitere Informationen zu diesem Thema auf die Postgres COPY docs Seite finden Sie hier: https://www.postgresql.org/docs/9.2/static/sql-copy.html

Die script erwartet, dass die CSV-Datei wie folgt aussehen:

|username|,|FirstName|,|LastName|,|[email protected]|,|{"address": "some address", "scraped_data": "blah"}| 

Beachten Sie auch, dass dieses Skript Open Source, so fühlen frei, um es nach Bedarf zu ändern!

Verwandte Themen