Tenter d'insérer un caractère d'échappement dans une table entraîne un avertissement.
Par exemple:
create table EscapeTest (text varchar(50));
insert into EscapeTest (text) values ('This is the first part \n And this is the second');
Produit l'avertissement:
WARNING: nonstandard use of escape in a string literal
( Utilisation de PSQL 8.2 )
Quelqu'un sait comment contourner cela?
string
postgresql
escaping
rjohnston
la source
la source
psql \copy
Remarque: j'ai trouvé que celaE'\n'
était écrit dans un fichier'\n'
plutôt que comme une nouvelle ligne lorsque je l'ai utilisé dans l'argument de requête de la méta-commande `\ copy 'de psql.Cool.
J'ai également trouvé la documentation concernant le E:
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
la source
L'avertissement est émis car vous utilisez des barres obliques inverses dans vos chaînes. Si vous voulez éviter le message, tapez cette commande "set standard_conforming_strings = on;". Ensuite, utilisez "E" avant votre chaîne, y compris les barres obliques inverses que vous voulez que postgresql interprète.
la source
\copy xxxxxxxxxxx FROM /support01/db/data/xxxxxxxxx_7F.txt DELIMITER AS E'\x7f'
, j'obtiensparse error at "'\x7f'"
. Si j'ai le standard_conforming_strings = off; et utilisez la même commande ci-dessus sans le E et les citations ... (DELIMITER AS \ x7f) Je reçois le message d'avertissement, mais les données se chargent bien. Votre déclaration peut donc être correcte, mais pas dans ce cas.Je trouve qu'il est très peu probable que Postgres tronque vos données en entrée - il les rejette ou les stocke telles quelles.
la source
character varying(4)
colonne avec l'entrée "test" (deux espaces après le mot, 6 caractères) tronquera les espaces et stockera la valeur "test". En règle générale, cependant, vous pouvez supposer que Postgres fera une erreur plutôt que de tronquer vos données.Question vraiment stupide: êtes-vous sûr que la chaîne est tronquée, et pas seulement interrompue au saut de ligne que vous spécifiez (et peut-être ne pas s'afficher dans votre interface)? Par exemple, vous attendez-vous à ce que le champ apparaisse comme
ou
De plus, quelle interface utilisez-vous? Est-il possible que quelque chose en cours de route mange vos barres obliques inverses?
la source