sql >> Database >  >> RDS >> PostgreSQL

Zet $$ in een dollar-aanhalingsteken in PostgreSQL

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.




  1. Hoe krijg ik alleen tabellen, geen views met SHOW TABLES?

  2. Mijn mysql-query optimaliseren om index te gebruiken voor sorteren

  3. Hoe Oracle Interval in Java weer te geven

  4. Een reeks maken op een bestaande tafel