postgresql-테이블 세트 기본값에 부울 열 추가


159

이 적절한 postgresql 구문은 기본값이 테이블에 열을 추가하는 것입니까? false

ALTER TABLE users
ADD "priv_user" BIT
ALTER priv_user SET DEFAULT '0'

감사!


3
비트 열 또는 실제 boolean열을 원하십니까?
rfusca

답변:


285
ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN DEFAULT FALSE;

NOT NULL을 직접 지정할 수도 있습니다.

ALTER TABLE users
  ADD COLUMN "priv_user" BOOLEAN NOT NULL DEFAULT FALSE;

업데이트 : 다음은 postgresql 11 이전 버전에만 해당됩니다.

채워진 테이블에 대해 Craig가 언급했듯이 테이블을 단계로 나누는 것이 더 효율적입니다.

ALTER TABLE users ADD COLUMN priv_user BOOLEAN;
UPDATE users SET priv_user = 'f';
ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;
ALTER TABLE users ALTER COLUMN priv_user SET DEFAULT FALSE;

28
테이블이 크면 시간이 오래 걸리고 전체 시간 동안 테이블을 잠글 수 있습니다. 단계를 나누는 것이 더 빠릅니다. 기본값으로을 사용하지 않고 열을 추가 ALTER TABLE users ADD COLUMN priv_user BOOLEAN;한 다음 UPDATE users SET priv_user = 'f';, 필요한 경우을 추가하십시오 ALTER TABLE users ALTER COLUMN priv_user SET NOT NULL;.
Craig Ringer

단계로 분리 된 접근 방식은 기본값을 추가하지 않습니다. 별도의 단계에서 "DEFAULT 'f'"를 추가하는 것이 여전히 더 빠릅니까?
Charlie Brown

1
예, 별도의 단계에서 기본값을 추가하는 것은 메타 데이터 작업 일 뿐이므로 매우 빠릅니다.
Eelke

메타 데이터 작업이란 무엇입니까? 어떤 의미에서 한 번에 값을 설정하는 것과 다른 이유는 무엇입니까? 감사합니다
Andrey M. Stepanov

1
실제 규칙은 키워드와 따옴표없는 식별자는 대소 문자를 구분하지 않으므로 내부적으로 postgresql은 부울을 사용한다고 생각하는 BOOLEAN이 허용됩니다. 표준 유형과 SQL 키워드를 대문자로 쓰는 경향이 있으며 모든 고유 식별자에 소문자를 사용합니다.
Eelke

17

실제 부울 열을 원하는 경우 :

ALTER TABLE users ADD "priv_user" boolean DEFAULT false;

참고 : 모든 Postgres 버전이이를 한 줄로 정의하는 것은 지원하지 않습니다.
Benjamin R

14

나중에 참조하기 위해 이미 부울 열이 있고 기본 작업을 추가하려는 경우 :

ALTER TABLE users
  ALTER COLUMN priv_user SET DEFAULT false;

5

postgresql을 사용하는 경우 열 유형 BOOLEAN을 소문자로 부울로 사용해야합니다.

ALTER TABLE 사용자 추가 "priv_user"부울 DEFAULT false;


4

psql에서 이와 같은 열 쿼리 구문

Alter table users add column priv_user boolean default false ;

부울 값 (true-false)(tf) value 와 같은 DB에 저장 합니다.

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