PostgreSQL에서 'user'라는 데이터베이스 테이블을 만들 수 없습니다.


95

PostgreSQL은 'user'라는 데이터베이스 테이블 생성을 허용하지 않는 것 같습니다. 그러나 MySQL은 이러한 테이블을 생성 할 수 있습니다.

그것은 키워드이기 때문입니까? 그러나 Hibernate는 어떤 문제도 식별 할 수 없습니다 (PostgreSQLDialect를 설정하더라도).


2
예, 사용자는 예약 된 키워드입니다. 테이블 이름으로 사용하지 마십시오. postgresql.org/docs/9.3/static/sql-keywords-appendix.html
JB Nizet 2014 년

postgreSQL에서 'user'라는 테이블을 만들 수 있습니다. 하지만 표 / 열 / 변수를 사용하지 않는 것이 좋습니다. 토큰 키워드를 사용하는 이름
Houari

중복 질문이 아닙니다. 질문은 MySql과 관련된 것이 아니라 postgresql에 관한 것입니다. 감사.
Channa 2014 년

답변:


145

user 예약어이며 일반적으로 식별자 (테이블, 열)에 예약어를 사용하는 것은 좋지 않습니다.

그렇게 고집한다면 테이블 이름을 큰 따옴표로 묶어야합니다.

create table "user" (...);

그러나 테이블을 참조 할 때 항상 큰 따옴표를 사용해야합니다. 또한 테이블 이름은 대소 문자를 구분합니다. "user"과 다른 테이블 이름 "User"입니다.

많은 어려움을 겪고 싶다면 다른 이름을 사용하십시오. users,, user_account...

인용 식별자에 대한 자세한 내용은 http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS 설명서에서 확인할 수 있습니다 .


불행히도 이것은 토픽 스타터가 언급했듯이 Hibernate 기반 프로젝트에서 답이 아닙니다. =) 여기서 실제 문제는 Hibernate가 그런 종류의 이스케이프를 자동으로 수행하지 못하는 것입니다. 적절한 사투리를 들었지만! 따라서 적절한 대답은 PSQL이 아닌 Hibernate에서 작업하는 방법을 설명해야합니다. :(
Maksim Gumerov

3
@MaksimGumerov : 올바른 대답은 : 사용중인 난독 화 계층에 관계없이 따옴표로 묶인 식별자가 필요한 이름을 사용하지 마십시오.
a_horse_with_no_name

아니요 :) 코드를 특정 데이터베이스와 해당 키워드에 묶게됩니다 (이 세트는 변경 될 수 있음). 하나의 실제 솔루션은 전역 적으로 이스케이프하는 것입니다 (하지만 직접 시도하지는 않음), 다른 하나는 Hibernate 방언 분석기에 의존하는 것입니다 (하지만 우리가 볼 수 있듯이 그들은 우리가 무언가를 탈출해야하는지 여부를 결정하는 데 항상 자신의 역할을 수행하지는 않습니다).
Maksim Gumerov 2018 년

@MaksimGumerov 요점은 데이터베이스에 예약되어 있기 때문에 user라는 테이블을 만들 수 없다는 것입니다.
IamDOM

물론 따옴표를 사용하여 할 수 있습니다. 내가 안할지도 모르지만 그것조차 논쟁의 여지가 있습니다. 더 중요한 것은 이러한 테이블을 어떻게 생성 하는가이며 여기에 제안 된 솔루션 (인용문 포함)은 Hibernate 프로젝트에서 도움이되지 않습니다. 그리고 초기 질문에는 Hibernate가 언급되어 있으므로 답변은 실제로 충분한 IMO에 대한 답변이 아닙니다.
Maksim Gumerov

18

다음 구문으로 JPA로 테이블 이름을 지정할 수 있습니다.

@Table(name="\"user\"")

그것은 내 문제를 해결했습니다. 그것 없이는 같은 오류가 발생했습니다column user0_.id does not exist
James Freitas

7

같은 문제가 얼마 전에 있었는데 테이블 이름을 user에서 app_user. Hibernate / JPA 사용으로 인해. 이 방법이 더 쉬울 것이라고 생각했습니다. 이 작은 수정이 다른 사람에게 도움이되기를 바랍니다.


같은 일을했습니다.
Stefan Falk 2019

1

user다른 스키마에서 테이블 을 만들 수 있습니다 public. 예 :

CREATE SCHEMA my_schema;
CREATE TABLE my_schema.user(...);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.