7

ファイル パスを解析する sql 関数を Postgresql に記述しようとしています。ファイル名だけを返したい。

関数で正確なテキスト文字列を取得することはできません。

関数は次のとおりです。

Function:  job_page("inputText" text)
DECLARE
    $5 text;

BEGIN
    $5 = quote_literal("inputText");
    return $5;
END

これを実行すると:

select job_page('\\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG')

私はこの結果を得ます:

"E'\\CAD_SVRCADJOBSé2-CEDARHURST ELEMENTARY SCHOOLé2-20.DWG'"

Postgresql は、特定の文字が続くスラッシュを特殊文字として解釈します。

どうやって逃げるの?

4

2 に答える 2

12

エスケープ文字列構文を使用する必要があります。

select E'\\CAD_SVR\\CADJOBS\\7512-CEDARHURST ELEMENTARY SCHOOL\\7512-20.DWG';

\CAD_SVR\CADJOBS\7512-CEDARHURST ELEMENTARY SCHOOL\7512-20.DWG

これはどんな場合でも機能します。

または、次set standard_conforming_strings=onを使用できます。

select '\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG';

\CAD_SVR\CADJOBS\7512-CEDARHURST/ ELEMENTARY SCHOOL\7512-20.DWG

quote_literalexec関数は、pl/pgsql 関数で呼び出すためのクエリを作成する場合にのみ使用してください。PQescapeStringConnクライアントでクエリを作成するには、libpq やpg_escape_stringPHPのように、クライアントのライブラリ引用関数を使用する必要があります。しかし、最良のオプションは、準備済みステートメントを使用し、文字列を引数として使用することです。これにより、すべての引用が排除され、はるかに安全になります。

于 2010-06-17T09:32:15.313 に答える
1

別の\で\をエスケープする必要があります

すなわち\\

この動作をオフに変更するには、standard_conforming_stringsオプションをオンに設定します。デフォルトではオフになっていますが、このデフォルトは将来変更される予定です。

とりあえずダブルバックスラッシュをお勧めします。

于 2010-06-15T21:20:18.537 に答える