Der Versuch, ein Escape-Zeichen in eine Tabelle einzufügen, führt zu einer Warnung.
Beispielsweise:
create table EscapeTest (text varchar(50));
insert into EscapeTest (text) values ('This is the first part \n And this is the second');
Erzeugt die Warnung:
WARNING: nonstandard use of escape in a string literal
( Verwenden von PSQL 8.2 )
Weiß jemand, wie man das umgeht?
string
postgresql
escaping
rjohnston
quelle
quelle
psql \copy
Hinweis: Ich habe festgestellt, dass diesE'\n'
als Datei'\n'
und nicht als Zeilenumbruch geschrieben wurde, als ich es im Abfrageargument für den Meta-Befehl "\ copy" von psql verwendet habe.Cool.
Ich habe auch die Dokumentation zum E gefunden:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
quelle
Die Warnung wird ausgegeben, da Sie Backslashes in Ihren Zeichenfolgen verwenden. Wenn Sie die Meldung vermeiden möchten, geben Sie den folgenden Befehl ein: "set standard_conforming_strings = on;". Verwenden Sie dann "E" vor Ihrer Zeichenfolge, einschließlich Backslashes, die postgresql interpretieren soll.
quelle
\copy xxxxxxxxxxx FROM /support01/db/data/xxxxxxxxx_7F.txt DELIMITER AS E'\x7f'
, erhalte ichparse error at "'\x7f'"
. Wenn ich die standard_conforming_strings = off habe; und benutze den gleichen Befehl oben ohne das E und die Anführungszeichen ... (DELIMITER AS \ x7f) Ich erhalte die Warnmeldung, aber die Daten werden gut geladen. Ihre Aussage mag also richtig sein, aber in diesem Fall nicht.Ich finde es sehr unwahrscheinlich, dass Postgres Ihre Daten bei der Eingabe abschneidet - es lehnt sie entweder ab oder speichert sie so wie sie sind.
quelle
character varying(4)
Spalte mit der Eingabe "test" (zwei Leerzeichen nach dem Wort, 6 Zeichen) die Leerzeichen ab und speichert den Wert "test". In der Regel können Sie jedoch davon ausgehen, dass Postgres Fehler verursacht, anstatt Ihre Daten abzuschneiden.Wirklich dumme Frage: Sind Sie sicher, dass die Zeichenfolge abgeschnitten wird und nicht nur bei dem von Ihnen angegebenen Zeilenumbruch unterbrochen wird (und möglicherweise nicht in Ihrer Benutzeroberfläche angezeigt wird)? Erwarten Sie also, dass das Feld als angezeigt wird?
oder
Welche Schnittstelle verwenden Sie? Ist es möglich, dass etwas auf dem Weg Ihre Backslashes frisst?
quelle