escape-символы postgres

Я новичок в postgres, как я могу избежать синтаксиса RTF в параметре MESSAGE предложения where?

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
nl ja de
Извини за это. PostgresSQL 9.0.4 и C# .Net.
добавлено автор ChampChris, источник
Пожалуйста, always укажите версию PostgreSQL и язык, который вы используете для отправки SQL.
добавлено автор Craig Ringer, источник

1 ответы

На PostgreSQL 9.3 или новее и не изменили вручную параметр standard_conforming_strings , вам не нужно ничего избегать, кроме одиночных кавычек, которые вы удваиваете следующим образом:

'this is a single quote: ''. '

Если вы используете более старую версию, установите standard_conforming_strings в на в postgresql.conf ) или выполните двойную обратную косую черту и используйте E ' Обозначение строки :

E'{\\rtf1'

Все это объясняется в разделе лексической структуры руководства пользователя .

Тем не менее, вы действительно должны использовать клиентский драйвер PostgreSQL своего языка для отправки параметризованных операторов , которые автоматически улавливаются. Несоблюдение этого может привести к удалению SQL-инъекций - см. этот сайт .

Поскольку вы используете C# с npgsql, вы, вероятно, захотите http://bobby-tables.com/csharp.html . Более подробная информация приведена в руководстве пользователя npgsql .

20
добавлено
Не нужно избегать одиночных кавычек в современном Postgresql, если используется котировка доллара, как в $$, это одна цитата: '. $$
добавлено автор Clodoaldo Neto, источник
@ChampionChris Отвечено обновлено.
добавлено автор Craig Ringer, источник
Не могли бы вы определить современный номер версии над чем-то, пожалуйста?
добавлено автор wligtenberg, источник
pgsql – PostgreSQL
pgsql – PostgreSQL
2 429 участник(ов)

Чат про PostgreSQL

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.