Échapper à un guillemet unique dans PostgreSQL
- Échapper à un guillemet unique dans PostgreSQL
- Échapper à un guillemet simple en utilisant un autre guillemet simple dans PostgreSQL
- Échapper à un guillemet simple à l’aide d’une barre oblique inverse dans PostgreSQL
- Échapper à une citation unique par une citation en dollars 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:
- un autre guillemet simple
- une barre oblique inverse
- 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.