Escapar de una comilla simple en PostgreSQL

Joy Idialu 30 enero 2023
  1. Escapar de una comilla simple en PostgreSQL
  2. Escapar de una comilla simple usando otra comilla simple en PostgreSQL
  3. Escape de una comilla simple usando una barra invertida en PostgreSQL
  4. Escapar de una sola cotización por cotización de dólar en PostgreSQL
Escapar de una comilla simple en PostgreSQL

Este tutorial explica cómo escapar de una comilla simple en una consulta de PostgreSQL.

Escapar de una comilla simple en PostgreSQL

Considere una tabla de comentarios que realice un seguimiento de los comentarios de los usuarios. La tabla tiene 5 campos: id, userid, postid, comentarios, commentdate, como se muestra aquí:

|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

Crearemos la tabla en el ejemplo anterior. Aquí está la instrucción CREATE para la tabla de comentarios:

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

Después de crear la tabla, insertaremos los valores en la primera fila del ejemplo anterior. A continuación se muestra la instrucción INSERT para la primera fila:

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

Esta consulta se inserta correctamente.

A continuación, insertemos los valores en la segunda fila. A continuación se muestra la instrucción INSERT:

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

Cuando intentamos ejecutar la instrucción anterior, se genera un error de sintaxis, como se muestra aquí:

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

PostgreSQL no puede dar sentido a las palabras después de We, ya que asume que la comilla simple después de We indica el final de la cadena. Las filas 3 y 5 darán un error similar ya que todas tienen comillas simples en el campo comments.

A continuación se muestra la declaración para insertar todas las filas en el ejemplo:

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

La declaración anterior dará el mismo error que el error al insertar solo la segunda fila.

Una forma de resolver esto es escapar de la comilla simple, y esto se puede lograr con:

  1. otra comilla simple
  2. una barra invertida
  3. cotización en dólares

Escapar de una comilla simple usando otra comilla simple en PostgreSQL

Se puede especificar una comilla simple en forma de escape escribiendo una comilla simple seguida de una comilla simple para escapar. Esta solución se muestra aquí:

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

La declaración para escapar de todas las comillas simples en la declaración anterior se muestra aquí:

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

Producción :

|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

Escape de una comilla simple usando una barra invertida en PostgreSQL

Para escapar de una comilla simple usando una barra invertida, debe colocar el símbolo E antes de la cadena, que es un comentario en nuestro ejemplo, y colocar una barra invertida justo antes de la comilla simple que se escapará, como se muestra aquí:

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

Producción :

|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

Escapar de una sola cotización por cotización de dólar en PostgreSQL

Si desea una solución más legible, especialmente cuando hay varias comillas simples, se pueden usar las comillas en dólares.

Las cotizaciones en dólares hacen que la solución sea legible si hay más comillas simples en la cadena. La cotización de dólar usa un signo de dólar, una etiqueta opcional, la cadena, en este caso, el comentario, seguido de otro signo de dólar, la etiqueta opcional y un signo de dólar de cierre.

Se puede usar una comilla simple en una cadena cotizada en dólares sin que se escape. Se puede insertar una fila usando cotizaciones en dólares como esta:

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

Aquí está la documentación oficial para saber más sobre las constantes de cadena de PostgreSQL y sus escapes.

Artículo relacionado - PostgreSQL String