Use diferentes comillas-de-dólares en cambio:
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$ )
Cada final tiene que coincidir con cada inicio. Los dos pares no tienen que ser distintos, pero es más seguro de esa manera.
Esto todavía deja una posibilidad teórica de que la cotización del dólar coincida dentro de la cadena.
Si está creando la consulta a mano, solo verifique $
en la cadena. Si está creando la consulta a partir de variables, puede usar quote_literal(querystring)
en su lugar.
También existe el conveniente format()
función.
Ver:
Aparte:supongo que sabe que esta forma de SQL dinámico es extremadamente vulnerable a la inyección de SQL. Cualquier cosa por el estilo debe ser solo para uso muy privado o muy seguro.