Hi,
ich habe folgendes Problem:
Ich verwende den folgenden Befehl:
“copy tabelle1 to E’/pfad/datei’ CSV ENCODING ‘UTF8’ QUOTE '”’ DELIMITER E’\t’ ESCAPE E’\';"
um eine Tabelle auszuspoolen.
Wenn ich die Tabelle mit dem obigen befehl ausspoole erhalte ich (ERGEBNIS-IST). Der Text ‘hallo welt’ steht nicht in doppelten Anführungszeichen.
Ich möchte aber das er so aussieht wie in (ERGEBNIS-SOLL) mit Anführungszeichen.
Ergebnis - IST:
1 “” hallo welt 2
Ergebnis - SOLL
1 “” “hallo welt” 2
Gibt es dazu eine Möglichkeit, ohne das ich einen kompletten select, mit allen betroffenen Spalten, zusammenbauen muss?
Es ist ein wenig schwierig zu erkennen was genau Dein Befehl ist, weil irgendwie die Anführungszeichen alle “falsch” sind. Mir ist vor allem nicht klar was genau Du als Escape Zeichen haben willst. Wenn das ein \ sein soll, musst Du bei der E'..' Syntax den Backslash verdoppeln (ESCAPE E'\\'), oder einen normalen SQL String verwenden (bei dem das \ keine besondere Bedeutung hat): ESCAPE '\'
Das Quote Zeichen wird nur hinzugefügt, wenn der Wert einer Spalte den DELIMITER enthält. In Deinem Beispiel ist das Quote Zeichen nicht notwendig.
Mit force_quote kannst Du erzwingen, dass das QUOTE Zeichen immer um bestimmte Spalten gesetzt wird:
copy tabelle1
to ’/pfad/datei’
with (format CSV,
ENCODING 'UTF8',
QUOTE '"',
DELIMITER E'\t',
ESCAPE '\'
force_quote (col1, col2));
Danke;
kann sein das es ein wenig verwirrend ist, kommt aus einem python skript. Es funktionierte aber irgendwie
Wenn das die einzige Möglichkeit ist, mit der expliziten Angabe der Spalte, dann muss ich das wohl anders umsetzen.
Ich hatte gehofft das umgehen zu können.