Verwenden Sie verschiedene Dollar-Anführungszeichen stattdessen:
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$ )
Jedes Ende muss zu jedem Start passen. Die beiden Paare müssen nicht verschieden sein, aber so ist es am sichersten.
Dies lässt immer noch eine theoretische Chance, dass das Dollar-Quote innerhalb der Zeichenfolge gefunden wird.
Wenn Sie die Abfrage manuell erstellen, suchen Sie einfach nach $
in der Zeichenfolge. Wenn Sie die Abfrage aus Variablen erstellen, können Sie quote_literal(querystring)
stattdessen.
Es gibt auch das bequeme format()
Funktion.
Siehe:
Beiseite:Ich nehme an, Sie wissen, dass diese Form von dynamischem SQL extrem anfällig für SQL-Injection ist? Alles in dieser Art sollte nur für den sehr privaten oder sehr sicheren Gebrauch bestimmt sein.