Letterali a corda
Sfuggire alle virgolette singole 'raddoppiandole -> ''è il modo standard e funziona ovviamente:
'user's log' -- incorrect syntax (unbalanced quote)
'user''s log'
Nelle versioni precedenti o se si esegue ancora con standard_conforming_strings = offo, in genere, se si antepone la stringa Eper dichiarare la sintassi della stringa di escape Posix , è possibile anche eseguire la escape con la barra rovesciata \:
E'user\'s log'
La stessa barra rovesciata viene salvata con un'altra barra rovesciata. Ma questo non è generalmente preferibile.
Se devi affrontare molte virgolette singole o più livelli di escape, puoi evitare di citare l'inferno in PostgreSQL con stringhe tra virgolette :
'escape '' with '''''
$$escape ' with ''$$
Per evitare ulteriore confusione tra le virgolette, aggiungi un token univoco a ciascuna coppia:
$token$escape ' with ''$token$
Che può essere nidificato in qualsiasi numero di livelli:
$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$
Fai attenzione se il $personaggio deve avere un significato speciale nel tuo software client. Potrebbe essere necessario scappare in aggiunta. Questo non è il caso dei client PostgreSQL standard come psql o pgAdmin.
Ciò è molto utile per scrivere funzioni plpgsql o comandi SQL ad hoc. Tuttavia, non può alleviare la necessità di utilizzare istruzioni preparate o altri metodi per salvaguardare dall'iniezione SQL nell'applicazione quando è possibile l'input dell'utente. La risposta di @ Craig ha di più su questo. Più dettagli:
Valori all'interno di Postgres
Quando si hanno a che fare con valori all'interno del database, ci sono un paio di utili funzioni per citare correttamente le stringhe:
quote_literal()oppurequote_nullable() - quest'ultimo genera la stringa NULLper input null. (È inoltre necessario quote_ident()fare una virgoletta doppia tra parentesi quando necessario per ottenere identificatori SQL validi .)
format()con l'identificatore di formato %Lequivale a quote_nullable().
Piace:format('%L', string_var)
concat()o inconcat_ws() genere non vanno bene perché non sfuggono alle virgolette singole singole e alle barre rovesciate.