Maskieren ein einzelnes Anführungszeichen in PostgreSQL

Joy Idialu 30 Januar 2023
  1. Maskieren Sie ein einzelnes Anführungszeichen in PostgreSQL
  2. Maskieren Sie ein einfaches Anführungszeichen mit einem anderen einfachen Anführungszeichen in PostgreSQL
  3. Maskieren Sie ein einzelnes Anführungszeichen mit einem Backslash in PostgreSQL
  4. Umgehen Sie ein einzelnes Zitat durch Dollarnotierung in PostgreSQL
Maskieren ein einzelnes Anführungszeichen in PostgreSQL

In diesem Tutorial wird erläutert, wie Sie ein einfaches Anführungszeichen in einer PostgreSQL-Abfrage mit Escapezeichen versehen.

Maskieren Sie ein einzelnes Anführungszeichen in PostgreSQL

Stellen Sie sich eine Kommentartabelle vor, die die Kommentare der Benutzer verfolgt. Die Tabelle hat 5 Felder: id, userid, postid, comments, commentdate, wie hier gezeigt:

|id | userid  | postid  | comments                       | commentdate
|---|-------- |---------|--------------------------------|---------------------
|1  | 1       |  1      | The post is great              | 07-02-2022 11:03:05
|2  | 2       |  1      | We've found the right post     | 07-02-2022 01:17:02
|3  | 3       |  3      | I'm working on a related post  | 08-02-2022 09:12:17
|4  | 4       |  3      | Excellent post                 | 08-02-2022 12:04:01
|5  | 5       |  4      | The post's title is impressive | 09-02-2022 16:23:09

Wir werden die Tabelle im obigen Beispiel erstellen. Hier ist die CREATE-Anweisung für die Kommentartabelle:

CREATE TABLE comments
(
    id INT NOT NULL GENERATED ALWAYS AS IDENTITY,
    userid INT NOT NULL,
    postid INT NOT NULL,
    comments TEXT NOT NULL,
    commentdate TIMESTAMP NOT NULL,
    CONSTRAINT comment_pkey PRIMARY KEY (id)
)

Nachdem wir die Tabelle erstellt haben, werden wir die Werte in der ersten Zeile im obigen Beispiel einfügen. Unten ist die INSERT-Anweisung für die erste Zeile:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES (1, 1, 'The post is great', '07-02-2022 11:03:05');

Diese Abfrage wurde erfolgreich eingefügt.

Als nächstes fügen wir die Werte in die zweite Zeile ein. Unten ist die INSERT-Anweisung:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES (2, 1, 'We've found the right post', '07-02-2022 01:17:02');

Wenn wir versuchen, die obige Anweisung auszuführen, wird ein Syntaxfehler ausgegeben, wie hier gezeigt:

ERROR:  syntax error at or near "ve"
LINE 1: ... postid, comments, commentdate) VALUES (2, 1, 'We've found t...

PostgreSQL kann die Wörter nach We nicht verstehen, da es davon ausgeht, dass das einfache Anführungszeichen nach We das Ende der Zeichenfolge anzeigt. Die Zeilen 3 und 5 geben einen ähnlichen Fehler aus, da sie alle einfache Anführungszeichen im Feld Kommentare enthalten.

Unten ist die Anweisung zum Einfügen aller Zeilen im Beispiel:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES
    (1, 1, 'The post is great', '07-02-2022 11:03:05'),
    (2, 1, 'We've found the right post', '07-02-2022 01:17:02'),
    (3, 3, 'I'm working on a related post', '08-02-2022 09:12:17'),
    (4, 3, 'Excellent post', '08-02-2022 12:04:01'),
    (5, 4, 'The post's title is impressive', '09-02-2022 16:23:09');

Die obige Anweisung gibt den gleichen Fehler wie der Fehler beim Einfügen nur der zweiten Zeile.

Eine Möglichkeit, dies zu lösen, besteht darin, das einfache Anführungszeichen zu maskieren, und dies kann erreicht werden mit:

  1. ein weiteres einfaches Anführungszeichen
  2. ein umgekehrter Schrägstrich
  3. Dollarnotierung

Maskieren Sie ein einfaches Anführungszeichen mit einem anderen einfachen Anführungszeichen in PostgreSQL

Ein einfaches Anführungszeichen kann in Escape-Form angegeben werden, indem ein einfaches Anführungszeichen gefolgt von einem einfachen Anführungszeichen geschrieben wird, das mit Escapezeichen versehen werden soll. Diese Lösung wird hier gezeigt:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES (2, 1, 'We''ve found the right post', '07-02-2022 01:17:02');

Die Anweisung, alle einfachen Anführungszeichen in der obigen Anweisung zu maskieren, wird hier gezeigt:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES
    (1, 1, 'The post is great', '07-02-2022 11:03:05'),
    (2, 1, 'We''ve found the right post', '07-02-2022 01:17:02'),
    (3, 3, 'I''m working on a related post', '08-02-2022 09:12:17'),
    (4, 3, 'Excellent post', '08-02-2022 12:04:01'),
    (5, 4, 'The post''s title is impressive', '09-02-2022 16:23:09');

Ausgabe:

|id | userid  | postid  | comments                       | commentdate
|---|-------- |---------|--------------------------------|---------------------
|1  | 1       |  1      | The post is great              | 07-02-2022 11:03:05
|2  | 2       |  1      | We've found the right post     | 07-02-2022 01:17:02
|3  | 3       |  3      | I'm working on a related post  | 08-02-2022 09:12:17
|4  | 4       |  3      | Excellent post                 | 08-02-2022 12:04:01
|5  | 5       |  4      | The post's title is impressive | 09-02-2022 16:23:09

Maskieren Sie ein einzelnes Anführungszeichen mit einem Backslash in PostgreSQL

Um ein einfaches Anführungszeichen mit einem Backslash zu maskieren, müssen Sie das Symbol E vor die Zeichenfolge setzen, die in unserem Beispiel ein Kommentar ist, und einen Backslash direkt vor das einfache Anführungszeichen setzen, das maskiert werden soll, wie hier gezeigt:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES
    (1, 1, 'The post is great', '07-02-2022 11:03:05'),
    (2, 1, E'We\'ve found the right post', '07-02-2022 01:17:02'),
    (3, 3, E'I\'m working on a related post', '08-02-2022 09:12:17'),
    (4, 3, 'Excellent post', '08-02-2022 12:04:01'),
    (5, 4, E'The post\'s title is impressive', '09-02-2022 16:23:09');

Ausgabe:

|id | userid  | postid  | comments                       | commentdate
|---|-------- |---------|--------------------------------|---------------------
|1  | 1       |  1      | The post is great              | 07-02-2022 11:03:05
|2  | 2       |  1      | We've found the right post     | 07-02-2022 01:17:02
|3  | 3       |  3      | I'm working on a related post  | 08-02-2022 09:12:17
|4  | 4       |  3      | Excellent post                 | 08-02-2022 12:04:01
|5  | 5       |  4      | The post's title is impressive | 09-02-2022 16:23:09

Umgehen Sie ein einzelnes Zitat durch Dollarnotierung in PostgreSQL

Wenn Sie eine besser lesbare Lösung wünschen, insbesondere wenn mehrere einfache Anführungszeichen vorhanden sind, können Dollarnotierungen verwendet werden.

Dollar-Quoting macht die Lösung lesbar, wenn mehr einfache Anführungszeichen in der Zeichenfolge enthalten sind. Dollarzitate verwenden ein Dollarzeichen, ein optionales Tag, die Zeichenfolge, in diesem Fall den Kommentar, gefolgt von einem weiteren Dollarzeichen, dem optionalen Tag und einem schließenden Dollarzeichen.

Ein einfaches Anführungszeichen kann in einer Zeichenfolge in Dollar-Anführungszeichen verwendet werden, ohne dass es maskiert wird. Eine Zeile kann mit Dollar-Quoten wie folgt eingefügt werden:

INSERT INTO comments (userid, postid, comments, commentdate)
VALUES (6, 5, $$'I've shared the post. It's quite impressive'$$, '09-02-2022 16:34:17')

Hier ist die offizielle Dokumentation, um mehr über PostgreSQL-String-Konstanten und ihre Escapes zu erfahren.

Verwandter Artikel - PostgreSQL String