Échapper à un guillemet unique dans PostgreSQL

Joy Idialu 30 janvier 2023
  1. Échapper à un guillemet unique dans PostgreSQL
  2. Échapper à un guillemet simple en utilisant un autre guillemet simple dans PostgreSQL
  3. Échapper à un guillemet simple à l’aide d’une barre oblique inverse dans PostgreSQL
  4. Échapper à une citation unique par une citation en dollars dans PostgreSQL
Échapper à un guillemet unique dans PostgreSQL

Ce didacticiel explique comment échapper un guillemet simple dans une requête PostgreSQL.

Échapper à un guillemet unique dans PostgreSQL

Considérez une table de commentaires qui garde une trace des commentaires des utilisateurs. La table comporte 5 champs : id, userid, postid, comments, commentdate, comme illustré ici :

|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

Nous allons créer le tableau dans l’exemple ci-dessus. Voici l’instruction CREATE pour la table des commentaires :

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)
)

Après avoir créé le tableau, nous allons insérer les valeurs dans la première ligne de l’exemple ci-dessus. Vous trouverez ci-dessous l’instruction INSERT pour la première ligne :

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

Cette requête s’insère avec succès.

Ensuite, insérons les valeurs dans la deuxième ligne. Ci-dessous la déclaration INSERT :

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

Lorsque nous tentons d’exécuter l’instruction ci-dessus, une erreur de syntaxe est générée, comme illustré ici :

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

PostgreSQL™ ne peut pas donner de sens aux mots après We car il suppose que le guillemet simple après We indique la fin de la chaîne. Les lignes 3 et 5 donneront une erreur similaire car elles ont toutes des guillemets simples dans le champ comments.

Ci-dessous se trouve l’instruction pour insérer toutes les lignes dans l’exemple :

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');

L’instruction ci-dessus donnera la même erreur que l’erreur lors de l’insertion uniquement de la deuxième ligne.

Une façon de résoudre ce problème consiste à échapper au guillemet simple, et cela peut être accompli avec:

  1. un autre guillemet simple
  2. une barre oblique inverse
  3. citation en dollars

Échapper à un guillemet simple en utilisant un autre guillemet simple dans PostgreSQL

Un guillemet simple peut être spécifié sous forme échappée en écrivant un guillemet simple suivi d’un guillemet simple à échapper. Cette solution est illustrée ici :

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

L’instruction pour échapper à tous les guillemets simples dans l’instruction ci-dessus est illustrée ici :

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');

Production:

|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

Échapper à un guillemet simple à l’aide d’une barre oblique inverse dans PostgreSQL

Pour échapper un guillemet simple à l’aide d’un antislash, vous devez placer le symbole E avant la chaîne, qui est un commentaire dans notre exemple, et placer un antislash juste avant l’apostrophe à échapper, comme illustré ici :

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');

Production:

|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

Échapper à une citation unique par une citation en dollars dans PostgreSQL

Si vous souhaitez une solution plus lisible, en particulier lorsque plusieurs guillemets simples sont présents, les guillemets en dollars peuvent être utilisés.

Les guillemets en dollars rendent la solution lisible s’il y a plus de guillemets simples dans la chaîne. La citation en dollars utilise un signe dollar, une balise facultative, la chaîne, dans ce cas, le commentaire, suivi d’un autre signe dollar, de la balise facultative et d’un signe dollar de fermeture.

Un guillemet simple peut être utilisé dans une chaîne entre guillemets dollar sans être échappé. Une ligne peut être insérée en utilisant des guillemets en dollars comme ceci :

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')

Voici la documentation officielle pour en savoir plus sur les constantes de chaîne PostgreSQL et leurs échappements.

Article connexe - PostgreSQL String