Gebruik verschillende dollarquotes in plaats daarvan:
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$ )
Elk einde moet overeenkomen met elk begin. De twee paren hoeven niet van elkaar te onderscheiden te zijn, maar zo is het het veiligst.
Dit laat nog steeds een theoretische kans dat de dollar-quote in de string past.
Als u de query met de hand maakt, controleert u gewoon op $
in de string.Als u de query op basis van variabelen bouwt, kunt u quote_literal(querystring)
in plaats daarvan.
Er is ook de handige format()
functie.
Zie:
Terzijde:ik neem aan dat u weet dat deze vorm van dynamische SQL extreem kwetsbaar is voor SQL-injectie? Iets dergelijks zou alleen voor zeer privé of zeer veilig gebruik moeten zijn.