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.