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

Text mit einfachen Anführungszeichen in PostgreSQL einfügen

String-Literale

Einfache Anführungszeichen maskieren ' durch Verdoppeln -> '' ist der Standardweg und funktioniert natürlich:

'user's log'     -- incorrect syntax (unbalanced quote)
'user''s log'

Einfache einfache Anführungszeichen (ASCII / UTF-8 Code 39), wohlgemerkt, keine Backticks ` , die in Postgres keinen besonderen Zweck haben (im Gegensatz zu bestimmten anderen RDBMS) und keine doppelten Anführungszeichen " , verwendet für Bezeichner.

In alten Versionen oder wenn Sie noch mit standard_conforming_strings = off laufen oder allgemein, wenn Sie Ihrer Zeichenfolge E voranstellen Posix-Escape-String-Syntax zu deklarieren , Sie können auch mit dem Backslash \ entkommen :

E'user\'s log'

Der Backslash selbst wird mit einem weiteren Backslash maskiert. Aber das ist im Allgemeinen nicht vorzuziehen.
Wenn Sie mit vielen einfachen Anführungszeichen oder mehreren Escape-Ebenen zurechtkommen müssen, können Sie es vermeiden, die Hölle in PostgreSQL mit Zeichenfolgen in Dollar-Anführungszeichen zu zitieren :

'escape '' with '''''
$$escape ' with ''$$

Um weitere Verwirrung zwischen Dollarkursen zu vermeiden, fügen Sie jedem Paar ein eindeutiges Token hinzu:

$token$escape ' with ''$token$

Welche beliebig viele Ebenen verschachtelt werden können:

$token2$Inner string: $token1$escape ' with ''$token1$ is nested$token2$

Achten Sie darauf, ob das $ sollte in Ihrer Client-Software eine besondere Bedeutung haben. Möglicherweise müssen Sie es zusätzlich entkommen. Dies ist bei Standard-PostgreSQL-Clients wie psql oder pgAdmin nicht der Fall.

Das ist alles sehr nützlich, um plpgsql-Funktionen oder Ad-hoc-SQL-Befehle zu schreiben. Es kann jedoch nicht die Notwendigkeit verringern, vorbereitete Anweisungen oder eine andere Methode zum Schutz vor SQL-Injection in Ihrer Anwendung zu verwenden, wenn Benutzereingaben möglich sind. @Craigs Antwort enthält mehr dazu. Weitere Einzelheiten:

  • SQL-Injection in Postgres-Funktionen im Vergleich zu vorbereiteten Abfragen

Werte in Postgres

Beim Umgang mit Werten innerhalb der Datenbank gibt es ein paar nützliche Funktionen, um Strings richtig in Anführungszeichen zu setzen:

  • quote_literal() oder quote_nullable() - letzteres gibt den String NULL aus für Nulleingabe. (Es gibt auch quote_ident() in doppelte Anführungszeichen Zeichenfolgen, wo sie benötigt werden, um gültige SQL-Identifikatoren zu erhalten .)
  • format() mit dem Formatbezeichner %L entspricht quote_nullable() .
    Zum Beispiel:format('%L', string_var)
  • concat() oder concat_ws() sind normalerweise nicht für diesen Zweck geeignet, da diese nicht Escape verschachtelte einfache Anführungszeichen und Backslashes.