Выход из обратной косой черты в Postgresql

Я пытаюсь записать функцию 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 интерпретирует наклонную черту, сопровождаемую определенными символами как специальный символ.

Как я выхожу?

6
задан sigod 16 June 2016 в 09:44
поделиться

2 ответа

Вы должны использовать синтаксис escape string:

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

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

Это будет работать в любом случае.

Или вы можете установить 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_literal следует использовать только тогда, когда вы будете строить запрос для exec вызова в функции pl/pgsql. Для построения запроса в клиенте следует использовать функцию цитирования клиентской библиотеки, например PQescapeStringConn в libpq или pg_escape_string в PHP. Но лучший вариант - использовать подготовленные операторы и использовать строку в качестве аргумента, что исключает все кавычки и гораздо безопаснее.

8
ответ дан 10 December 2019 в 02:42
поделиться

Вы должны выйти из \ с другим \

т.е. \\

Вы можете отключить это поведение, включив параметр standard_conforming_strings. По умолчанию он выключен, но в будущем это значение по умолчанию изменится.

Я пока рекомендую использовать двойную обратную косую черту.

1
ответ дан 10 December 2019 в 02:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: