PostgreSQL에서 작은 따옴표 피하기

Joy Idialu 2023년1월30일
  1. PostgreSQL에서 작은 따옴표 피하기
  2. PostgreSQL에서 다른 작은따옴표를 사용하여 작은따옴표 탈출
  3. PostgreSQL에서 백슬래시를 사용하여 작은따옴표 피하기
  4. PostgreSQL에서 달러 인용으로 작은 따옴표 피하기
PostgreSQL에서 작은 따옴표 피하기

이 자습서에서는 PostgreSQL 쿼리에서 작은따옴표를 이스케이프 처리하는 방법에 대해 설명합니다.

PostgreSQL에서 작은 따옴표 피하기

사용자의 의견을 추적하는 의견 테이블을 고려하십시오. 테이블에는 다음과 같이 id, userid, postid, comments, commentdate 5개의 필드가 있습니다.

|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

위의 예에서 테이블을 생성합니다. 주석 테이블에 대한 CREATE 문은 다음과 같습니다.

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

테이블을 생성한 후 위의 예에서 첫 번째 행에 값을 삽입합니다. 다음은 첫 번째 행에 대한 INSERT 문입니다.

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

이 쿼리는 성공적으로 삽입됩니다.

다음으로 두 번째 행에 값을 삽입해 보겠습니다. 다음은 INSERT 문입니다.

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

위의 명령문을 실행하려고 하면 다음과 같이 구문 오류가 발생합니다.

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

PostgreSQL은 We 뒤의 작은 따옴표가 문자열의 끝을 나타낸다고 가정하기 때문에 We 뒤의 단어를 이해할 수 없습니다. 3행과 5행은 모두 comments 필드에 작은따옴표가 있으므로 유사한 오류가 발생합니다.

다음은 예제의 모든 행을 삽입하는 명령문입니다.

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

위의 명령문은 두 번째 행만 삽입할 때 오류와 동일한 오류가 발생합니다.

이 문제를 해결하는 방법은 작은 따옴표를 이스케이프 처리하는 것이며 다음과 같이 수행할 수 있습니다.

  1. 또 다른 작은 따옴표
  2. 백슬래시
  3. 달러 견적

PostgreSQL에서 다른 작은따옴표를 사용하여 작은따옴표 탈출

작은따옴표는 작은따옴표 다음에 작은따옴표를 이스케이프 처리하여 이스케이프된 형식으로 지정할 수 있습니다. 이 솔루션은 다음과 같습니다.

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

위 명령문에서 모든 작은따옴표를 이스케이프하는 명령문이 다음과 같이 표시됩니다.

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

출력:

|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

PostgreSQL에서 백슬래시를 사용하여 작은따옴표 피하기

백슬래시를 사용하여 작은 따옴표를 이스케이프하려면 다음과 같이 문자열 앞에 E 기호를 배치해야 합니다.

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

출력:

|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

PostgreSQL에서 달러 인용으로 작은 따옴표 피하기

특히 여러 개의 작은 따옴표가 있는 경우 더 읽기 쉬운 솔루션을 원하면 달러 인용을 사용할 수 있습니다.

달러 인용은 문자열에 더 많은 작은 따옴표가 있는 경우 솔루션을 읽을 수 있도록 합니다. 달러 인용은 달러 기호, 선택적 태그, 문자열을 사용합니다. 이 경우에는 주석, 뒤에 다른 달러 기호, 선택적 태그 및 닫는 달러 기호가 옵니다.

작은따옴표는 이스케이프되지 않고 달러 인용 문자열에서 사용할 수 있습니다. 다음과 같이 달러 인용을 사용하여 행을 삽입할 수 있습니다.

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

다음은 PostgreSQL 문자열 상수와 이스케이프에 대해 자세히 알아보기 위한 공식 문서입니다.

관련 문장 - PostgreSQL String