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.