Use diferentes cotações de dólar em vez de:
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 extremidade tem que corresponder a cada início. Os dois pares não precisam ser distintos, mas é mais seguro assim.
Isso ainda deixa uma chance teórica de que a cotação do dólar possa ser correspondida dentro da string.
Se você estiver criando a consulta manualmente, verifique se há
$
na string. Se você estiver criando a consulta a partir de variáveis, poderá usar quote_literal(querystring)
em vez de. Há também o conveniente
format()
função. Ver:
À parte:suponho que você esteja ciente de que essa forma de SQL dinâmico é extremamente vulnerável à injeção de SQL? Qualquer coisa do tipo deve ser apenas para uso muito privado ou muito seguro.