간단한 PostgreSQL 삽입이 작동하지 않습니다.


82

postgres 테이블에 간단한 삽입을 시도하고 있지만 삽입하려는 값이 열 이름으로 해석된다는 오류가 발생합니다.

INSERT INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT, "auto dealer")

여기서 id는 null이 아닌 기본 키 및 자동 증가로 설정됩니다. phpPgAdmin에서 테이블을 설정할 때 선택한 상자입니다.

그래도이 오류가 발생합니다.

ERROR: ERROR: column "auto dealer" does not exist
Query = INSERT
INTO "imageTagBusinessMainCategory"
(id, businessMainCategory)
VALUES
(DEFAULT,
"auto dealer")

여기서 읽은 것처럼 테이블 이름을 큰 따옴표로 묶었습니다 .

그리고 여기서DEFAULT 읽은대로 id를 자동으로 늘려야 합니다.

어떤 아이디어? 감사!


13
'자동차 딜러'에는 작은 따옴표를 사용하십시오.
muratgu

2
작은 따옴표. 이드를 남겨주세요.
Paul Tomblin 2012 년

오류를 제공하는 ERROR: ERROR: syntax error at or near "'imageTagBusinessMainCategory'" Position: 13
@muratgu

@PaulTomblin "ID를 버리십시오"를 어떻게 의미합니까? 감사!
1252748

@Randy의 답변에 표시된 것처럼 의미합니다. 열 이름 주위에 큰 따옴표가 필요한 것처럼 보입니다.
Paul Tomblin 2012 년

답변:


165

'auto dealer'대신 사용하십시오 . PostgreSQL "은 식별자에 '대한 따옴표로 문자열에 대한 따옴표로 해석 합니다.

또한:

  • 이것이 새로운 프로젝트라면 대소 문자 혼합 테이블을 사용하지 마십시오. 나중에 좌절의 원인이됩니다. SQL 문에서 대소 문자를 사용할 수있는 대신 식별자 이름을 인용하고 대소 문자를 올바르게 가져와야합니다.

  • id/ 를 지정할 필요가 없습니다 DEFAULT. 이미 수행 한 작업을 수행하도록 요청하는 것입니다. 열에 기본값을 넣으려면 columnName/ 를 포함해야하는 DBMS를 만나지 DEFAULT못했기 때문에이 추가 KV 쌍이 나중에 코드를 읽는 사람에게 무슨 일이 일어나고 있는지 더 명확하게 해줄 것이라고 생각하지 않습니다. .


그 날이 오류 제공ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

1
테이블 이름과 같이 대소 문자가 혼합 된 열을 만들었을 것입니다. 이 경우 열 이름도 인용해야합니다. 이름을 지정할 때 대소 문자 혼합 사용을 중지하면 모든 사람이 많은 고통을 덜 수 있습니다.
매트

@Matt 나는 같은 문제에 직면하고 있으며 C ++에서 pg를 사용하려는 것은 큰 따옴표를 입력해야 할 때 고통 스럽습니다. 이러한 따옴표가 필요하지 않은 일부 설정과 같은 해결 방법이 없습니까?
itsols 2013-07-19

@itsols "또한"의 주먹 총알은 따옴표의 필요성을 제거합니다. [a-z0-9] 만 사용하여 신원을 정의하고 특정 케이스가있는 것으로 지정하지 마십시오 (따옴표없이 정의). 그런 다음 영원히 따옴표없이 원하는대로 참조 할 수 있습니다. 당신이나 다른 누군가가 테이블 이름에 공백이나 카멜 케이스를 사용하는 것이 정말 중요하다고 결정했다면 어디서나 재미있게 인용하십시오!
Matt

요점 잘 찍었습니다. Matt ... 저는 방금 CamelCase에 익숙해 졌나 봐요-오랜만에 (20 년 이상) ... 사실 문제는 큰 따옴표에 있지 않습니다 (예, 더 쉬울 것입니다 그것없이), 그러나 진짜 고통은 그들을 끈으로 탈출해야한다는 것이다. 나는 C ++과 pg를 합칠 때까지 이것이 오는 것을 보지 못했습니다. 어쨌든 귀하의 의견에 감사드립니다!
itsols jul.

9
INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')

편집 : 열 이름 주위에 큰 따옴표 추가


1
안녕하세요, 감사합니다. 이 오류가 발생합니다.ERROR: ERROR: column "businessmaincategory" of relation "imageTagBusinessMainCategory" does not exist
1252748

열 이름도 큰 따옴표로 묶어야하는 것 같습니다. PostgreSQL에서 대소 문자가 혼합 된 테이블 이름이 나쁜 생각 인 이유 중 하나입니다.
David Faber

@DavidFaber 네, 맞아요. 읽기가 조금 어렵습니다. 대시를 사용할 수 있습니까? ^^
1252748

1
@DavidFaber는 : 개인적으로 필요 (예 : 혼합 된 경우) 인용한다는 식별자에 나쁜 아이디어라고 생각 어떤 DBMS
a_horse_with_no_name

1
식별자를 만들 때를 제외한 모든 곳에서 따옴표없이 대소 문자를 혼합하여 참조 할 수 있습니다. 따라서 이름 thishasareallylongname이 지정된 테이블은 select * from thisHasAReallyLongName.
매트

4

Postgres, Oracle 등은 대소 문자가 혼합 된 경우 열 이름이 따옴표로 묶일 것으로 예상합니다. 따라서 테이블 열에 대한 모든 작은 또는 모든 대문자 규칙을 만들거나 David Faber가 제안한대로 따옴표를 사용하십시오.

INSERT INTO "imageTagBusinessMainCategory"
("businessMainCategory")
VALUES
('auto dealer')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.