Litterals strängar
Escapende enstaka citattecken ' genom att dubbla dem -> '' är standardsättet och fungerar naturligtvis:
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
Enkla citattecken (ASCII / UTF-8 kod 39), märk väl, inte backticks ` , som inte har något speciellt syfte i Postgres (till skillnad från vissa andra RDBMS) och inte dubbla citattecken " , används för identifierare.
I gamla versioner eller om du fortfarande kör med standard_conforming_strings = off eller, i allmänhet, om du lägger E före din sträng för att deklarera Posix escape-strängsyntax , kan du också escape med omvänt snedstreck \ :
E'user\'s log'
Själva snedstrecket undviks med ytterligare ett snedstreck. Men det är i allmänhet inte att föredra.
Om du har att göra med många enstaka citat eller flera lager av flykt, kan du undvika att citera helvetet i PostgreSQL med dollar-citerade strängar :
'escape '' with '''''
$$escape ' with ''$$ För att ytterligare undvika förvirring mellan dollarkurser, lägg till en unik token till varje par:
$token$escape ' with ''$token$
Som kan kapslas valfritt antal nivåer:
$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$
Var uppmärksam på om $ karaktär bör ha speciell betydelse i din klientprogramvara. Du kan behöva fly det dessutom. Detta är inte fallet med vanliga PostgreSQL-klienter som psql eller pgAdmin.
Det är mycket användbart för att skriva plpgsql-funktioner eller ad-hoc SQL-kommandon. Det kan dock inte lindra behovet av att använda förberedda satser eller någon annan metod för att skydda mot SQL-injektion i din applikation när användarinmatning är möjlig. @Craigs svar har mer om det. Mer information:
- SQL-injektion i Postgres-funktioner kontra förberedda frågor
Värden i Postgres
När man hanterar värden i databasen finns det ett par användbara funktioner för att citera strängar korrekt:
quote_literal()ellerquote_nullable()- den senare matar ut strängenNULLför nollinmatning. (Det finns ocksåquote_ident()till dubbelcitattecken strängar där det behövs för att få giltiga SQL identifierare .)format()med formatspecifikationen%Lmotsvararquote_nullable().
Som:format('%L', string_var)ellerconcat()är vanligtvis inte bra för detta ändamål eftersom de inte gör det undvik kapslade enstaka citattecken och snedstreck.concat_ws()