PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Metti $$ nella stringa tra virgolette in PostgreSQL

Usa dollar-quotes invece:

select upsert(
   $unique_token$INSERT INTO zz(a, b) VALUES (66, 'ha$$hahaha')$unique_token$,
   $unique_token2$UPDATE zz SET a=66, b='hahahaha' WHERE a=66$unique_token2$
   )

Ogni fine deve corrispondere a ogni inizio. Le due coppie non devono essere per forza distinte, ma è più sicuro così.

Questo lascia ancora una possibilità teorica che la quotazione del dollaro possa essere abbinata all'interno della stringa.

Se stai costruendo la query a mano, controlla semplicemente $ nella stringa.Se stai creando la query da variabili, puoi usare quote_literal(querystring) invece.

C'è anche il comodo format() funzione.

Vedi:

A parte:presumo che tu sia consapevole che questa forma di SQL dinamico è estremamente vulnerabile all'iniezione di SQL? Qualsiasi cosa del genere dovrebbe essere solo per un uso molto privato o molto sicuro.