回答:
部分的に。テキストは挿入されますが、警告は引き続き生成されます。
そのため、テキストの前に「E」を付ける必要があることを示すディスカッションが見つかりました。
insert into EscapeTest (text) values (E'This is the first part \n And this is the second');
これにより警告は抑制されましたが、テキストはまだ正しく返されていませんでした。Michaelが提案したようにスラッシュを追加したところ、うまくいきました。
など:
insert into EscapeTest (text) values (E'This is the first part \\n And this is the second');
psql \copy
注:psqlの「\ copy」メタコマンドのクエリ引数で使用すると、改行ではなくE'\n'
ファイルに書き込まれたことがわかりました'\n'
。
涼しい。
Eに関するドキュメントも見つかりました。
http://www.postgresql.org/docs/8.3/interactive/sql-syntax-lexical.html#SQL-SYNTAX-STRINGS
PostgreSQLは、SQL標準の拡張である「エスケープ」文字列定数も受け入れます。エスケープ文字列定数は、最初の単一引用符の直前に文字E(大文字または小文字)を書き込むことによって指定されます(例:E'foo ')。(エスケープ文字列定数を複数の行にまたがる場合は、最初の引用符の前にのみEを記述します。)エスケープ文字列内では、バックスラッシュ文字(\)がCのようなバックスラッシュエスケープシーケンスを開始します。 s)は特別なバイト値を表します。\ bはバックスペース、\ fはフォームフィード、\ nは改行、\ rはキャリッジリターン、\ tはタブです。\ digits(数字は8進バイト値を表す)と\ xhexdigits(16進数字は16進バイト値を表す)もサポートされています。(作成するバイトシーケンスがサーバーの文字セットエンコーディングで有効な文字であるかどうかはユーザーの責任です。)バックスラッシュに続くその他の文字は文字どおりに解釈されます。したがって、バックスラッシュ文字を含めるには、2つのバックスラッシュ(\\)を記述します。また、通常の ''の方法に加えて、\ 'と書くことにより、単一引用符をエスケープ文字列に含めることができます。
文字列でバックスラッシュを使用しているため、警告が発行されます。メッセージを避けたい場合は、このコマンド「set standard_conforming_strings = on;」を入力してください。次に、postgresqlに解釈させたいバックスラッシュを含む文字列の前に「E」を使用します。
\copy xxxxxxxxxxx FROM /support01/db/data/xxxxxxxxx_7F.txt DELIMITER AS E'\x7f'
、が取得されparse error at "'\x7f'"
ます。standard_conforming_strings = off;がある場合 Eと引用符なしで上記と同じコマンドを使用します...(DELIMITER AS \ x7f)警告メッセージが表示されますが、データは正常に読み込まれます。したがって、ステートメントは正しいかもしれませんが、この場合は正しくありません。
Postgresが入力時にデータを切り捨てる可能性は非常に低いと私は思います。拒否するか、そのまま保存します。
milen@dev:~$ psql
Welcome to psql 8.2.7, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
milen=> create table EscapeTest (text varchar(50));
CREATE TABLE
milen=> insert into EscapeTest (text) values ('This will be inserted \n This will not be');
WARNING: nonstandard use of escape in a string literal
LINE 1: insert into EscapeTest (text) values ('This will be inserted...
^
HINT: Use the escape string syntax for escapes, e.g., E'\r\n'.
INSERT 0 1
milen=> select * from EscapeTest;
text
------------------------
This will be inserted
This will not be
(1 row)
milen=>
character varying(4)
、入力 "test"(単語の後に2つのスペース、6文字)が指定された列では、スペースが切り捨てられ、値 "test"が格納されます。ただし、一般的なルールとして、Postgresはデータを切り捨てるのではなくエラーが発生すると想定できます。
本当にばかげた質問:文字列が切り捨てられ、指定した改行で改行されていない(そしておそらくインターフェイスに表示されていない)ことを本当に確信していますか?つまり、フィールドが次のように表示されることを期待していますか
これは挿入されます\ nこれは挿入されません
または
これが挿入されます
これはありません
また、どのインターフェースを使用していますか?途中で何かがバックスラッシュを食べている可能性はありますか?