在Postgresql中转义反斜杠

时间:2010-06-15 21:07:21

标签: postgresql escaping filepath slash

我正在尝试在Postgresql中编写一个解析文件路径的sql函数。 我想只返回文件名。

我无法在函数中获得准确的文本字符串。

这是功能:

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解释斜杠后跟某些字符作为特殊字符。

我如何逃避?

2 个答案:

答案 0 :(得分:7)

您应该使用转义字符串语法:

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
仅当您要在pl / pgsql函数中构造quote_literal调用的查询时,才应使用

exec函数。要在客户端构造查询,您应该使用客户端的库引用函数,如libpq中的PQescapeStringConn或PHP中的pg_escape_string。但最好的选择是使用预准备语句并使用字符串作为参数,这将消除所有引用,并且much safer也是。

答案 1 :(得分:0)

你必须用另一个\

来逃避\

即。 \\

您可以通过将standard_conforming_strings选项设置为on来更改此行为。默认情况下它已关闭,但此默认值将在未来一段时间内更改。

我建议暂时使用双反斜杠。