PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Setzen Sie $$ in PostgreSQL in eine Zeichenfolge in Dollar-Anführungszeichen

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.