2017-11-06 2 views
1

내가 postgres 내 첫 번째 테이블을 만들려고하지만, 오전을 만들어이 SQL 실행하면 : (포스트 그레스 테이블 오류

ERROR: relation "automated_group_msg_idx" does not exist

+0

'automated_group_msg_idx'를 자동 증가 ID로 지정 하시겠습니까? – Bohemian

+0

예. 자동 증가 기본 키 – user8895989

답변

1

귀하의 오류가 있습니다 : 나는 다음과 같은 오류가

create table public.automated_group_msg (
    automated_group_msg_idx integer NOT NULL DEFAULT nextval ('automated_group_msg_idx'::regclass), 
    group_idx integer NOT NULL, 
    template_idx integer NOT NULL, 
    CONSTRAINT automated_group_msg_pkey PRIMARY KEY (automated_group_msg_idx), 
    CONSTRAINT automated_group_msg_group_idx_fkey FOREIGN KEY (group_idx) 
    REFERENCES public.groups (group_idx) MATCH SIMPLE 
    ON UPDATE CASCADE ON DELETE CASCADE, 
    CONSTRAINT automated_msg_template_idx_fkey FOREIGN KEY (template_idx) 
    REFERENCES public.template (template_idx) MATCH SIMPLE 
    ON UPDATE CASCADE ON DELETE CASCADE 
) 
WITH (
OIDS = FALSE 
); 

을 왜냐하면 당신이 사용하려는 시퀀스가 ​​아직 존재하지 않기 때문입니다.

그러나이 구문을 사용하여 즉석에서 시퀀스를 만들 수 있습니다

create table public.automated_group_msg (
    id serial primary key, 
    ... -- other columns 
) 

직접 질문과 관련,하지만 열 이름에 테이블 이름과 열 이름은 일반적으로 말하는되지 않음 반 패턴, 특히 id이 업계 표준 인 기본 키의 경우. 또한 id 열이 항상 id 인 추상 클래스를 사용하여 앱 코드 리팩토링을 허용합니다. automated_group_msg.id이 무엇을 의미하는지 명확하고, automated_group_msg.automated_group_msg_id은 열차 잔해이며 여분의 정보가 포함되어 있습니다. customer.birth_date과 같은 속성 열 이름도 동일한 이유로 customer.customer_birth_date으로 장식하지 않아야합니다.

+0

포스트 그레스 문서를보고 있으며 다음과 같은 직렬로 작동해야합니다. 실제로 내가 작업하고있는 데이터베이스를 찾고 있었고 스키마가 일부 테이블에 정의되어있는 방법을 알고 있었기 때문에 내가 작성한 방식이 구문 적으로 올바른 것으로 생각하십시오. – user8895989

+0

@ user8895989 아니요 - 주로 부정확합니다. 포스트그레스에서 자동 증분은'sequence' 객체를 사용하여 구현됩니다. 시퀀스의 'nextval'을 참조하는 테이블 정의는 시퀀스 객체가 이미 생성되어 있어야합니다. 많은 SQL 객체 검사와 마찬가지로, 표시된 SQL은 DBA/dev가 원래 입력 한 SQL이 아닌 postgres의 내부 SQL 표현입니다. 그러나 수동으로 수행 할 때 어떤 이점도 없습니다. 단지'serial'의 편리한 구문을 사용하면 모든 것이 OK가됩니다. 시퀀스를 따로 정의하면 타이핑 연습을 제외하고는 아무런 이점이 없습니다. – Bohemian

+0

고마워요, 이건 정말 도움이됩니다. 또한, 당신이 제안한 명명 규칙은 완전한 의미를가집니다, 그것은 잔인한 일이며 아마도 일이 더 혼란스럽게 만듭니다. 귀하의 놀라운 의견에 감사드립니다. – user8895989