ポストグルのエスケープ文字

私はpostgresを初めて使っていますが、どこの句の MESSAGE パラメータでRTF構文をエスケープできますか?

select count(*) 
from communicationoutgoingmessagescheduledetails 
where email='[email protected]' 
and message='{\rtf1\deff0{\fonttbl{\f0 Times New Roman;}}{\colortbl\red0\green0\blue0 ;\red0\green0\blue255 ;}{\*\listoverridetable}{\stylesheet {\ql\cf0 Normal;}{\*\cs1\cf0 Default Paragraph Font;}{\*\cs2\sbasedon1\cf0 Line Number;}{\*\cs3\ul\cf1 Hyperlink;}}\splytwnine\sectd\pard\plain\ql{\cf0 first }{\b\cf0 paymen}{\b\cf0 t bold }{\cf0 rem}{\cf0 inder}\par\pard\plain\ql{\ul\cf0 se}{\ul\cf0 cond PAYMENT }{\b\ul\cf0 reminder}\b\ul\par}' 
and succeddful=-1 
and senttime::timestamp::date='2/7/2013 12:00:00 AM'

更新

これは私が得ているエラーです

WARNING:  nonstandard use of escape in a string literal LINE 4: and message='{\rtf1\deff0{\fonttbl{\f0 Times New Roman;}}{\c...

HINT:  Use the escape string syntax for escapes, e.g., E'\r\n'. 
ERROR:  invalid Unicode escape LINE 4: and message='{\rtf1\deff0{\fonttbl{\f0 Times New Roman;}}{\c...

HINT:  Unicode escapes must be \uXXXX or \UXXXXXXXX.
********** Error **********

ERROR: invalid Unicode escape SQL state: 22025 Hint: Unicode escapes must be \uXXXX or \UXXXXXXXX. Character: 124

更新 2

これはPostgreSQLから結果セットを取得するために実行しているコードです:

string sql = "select count(*) from communicationoutgoingmessagescheduledetails " +
                        "where email='" + email + "' ";

        if (message != string.Empty)
            sql += String.Format("and message='{0}' ", message);

        if (subject != string.Empty)
            sql += String.Format("and subject='{0}' ", subject);

        sql += "and successful=true " +
        "and senttime::timestamp::date='" + date.Date + "'";


        System.Data.IDbConnection connection = ORGen.Access.Config.Instance.Connection;
        IDbCommand command = connection.CreateCommand();

        connection.Open();
        command.CommandText = sql;
        bool retVal = Convert.ToInt16(command.ExecuteScalar()) > 0 ? true : false;
        connection.Close();

        command = null;
        connection = null;
9
申し訳ありません。 PostgresSQL 9.0.4およびC#.Net。
追加された 著者 ChampChris,
PostgreSQLのバージョンとSQLの送信に使用している言語を常に記述してください。
追加された 著者 Craig Ringer,

1 答え

PostgreSQL 9.3以降で、 standard_conforming_strings の設定を手動で変更していない場合は、一重引用符以外のものをエスケープする必要はありません。

'this is a single quote: ''. '

古いバージョンの場合は、 postgresql.conf standard_conforming_strings on に設定するか、バックスラッシュを二重にして '文字列表記:

E'{\\rtf1'

これについては、ユーザーマニュアルのレキシカル構造のセクションで説明しています。

しかし、自動的にエスケープする世話をするパラメータ化されたステートメントを送信するには、言語のPostgreSQLクライアントドライバを実際に使用する必要があります。そうしないと、 SQLインジェクションのホールにつながる可能性があります。このサイト

npgsqlでC#を使用しているので、おそらく http://bobby-tables.com/csharp.html 。詳細は、 npgsqlユーザーマニュアルを参照してください。

20
追加された
$$のようにドルの引用符を使用すると、現代のPostgresqlで一重引用符をエスケープする必要はありません。これは一重引用符です: '。$$
追加された 著者 Clodoaldo Neto,
@ChampionChris回答が更新されました。
追加された 著者 Craig Ringer,
何かの上のバージョン番号で現代を定義できますか?
追加された 著者 wligtenberg,