복붙노트

[SQL] 어떻게 널 (null)을 허용하지 않는 PostgreSQL 데이터베이스에 열을 추가 할 수 있습니까?

SQL

어떻게 널 (null)을 허용하지 않는 PostgreSQL 데이터베이스에 열을 추가 할 수 있습니까?

나는 (인터넷 용 소독) 다음 쿼리를 사용하여 내 PostgreSQL 데이터베이스에 새, "NOT NULL"열을 추가 해요 :

ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;

나는이 쿼리를 실행할 때마다, 나는 다음과 같은 오류 메시지가 나타납니다 :

나는 난처한 상황에 빠진거야. 어디에서 잘못을 하겠어?

참고 : 나는 주로 pgAdmin III (1.8.4)를 사용하고 있지만 터미널 내에서 SQL을 실행했을 때 나는 같은 오류가 발생했습니다.

해결법

  1. ==============================

    1.당신은 기본 값을 설정해야합니다.

    당신은 기본 값을 설정해야합니다.

    ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL DEFAULT 'foo';
    
    ... some work (set real values as you want)...
    
    ALTER TABLE mytable ALTER COLUMN mycolumn DROP DEFAULT;
    
  2. ==============================

    2.다른 사람이 관찰 한 것처럼, 당신도 Null 허용 열을 만들거나 DEFAULT 값을 제공해야합니다. 그 유연한 충분가 아닌 경우 (예를 들어, 새 값을 개별적으로 어떻게 든 각 행에 대해 계산해야 할 경우), 당신은 PostgreSQL을에 모든 DDL 명령은 트랜잭션 내에서 수행 될 수 있다는 사실을 사용할 수 있습니다 :

    다른 사람이 관찰 한 것처럼, 당신도 Null 허용 열을 만들거나 DEFAULT 값을 제공해야합니다. 그 유연한 충분가 아닌 경우 (예를 들어, 새 값을 개별적으로 어떻게 든 각 행에 대해 계산해야 할 경우), 당신은 PostgreSQL을에 모든 DDL 명령은 트랜잭션 내에서 수행 될 수 있다는 사실을 사용할 수 있습니다 :

    BEGIN;
    ALTER TABLE mytable ADD COLUMN mycolumn character varying(50);
    UPDATE mytable SET mycolumn = timeofday();    -- Just a silly example
    ALTER TABLE mytable ALTER COLUMN mycolumn SET NOT NULL;
    COMMIT;
    
  3. ==============================

    3.행이 이미 테이블에 존재하기 때문에, ALTER 문은 기존의 모든 행에 대해 새로 생성 된 컬럼에 NULL을 삽입을 시도하고 있습니다. 당신은 나중에 NOT NULL로 다음 NULL을 허용으로 열을 추가 원하는 값으로 열을 작성하고 설정해야합니다.

    행이 이미 테이블에 존재하기 때문에, ALTER 문은 기존의 모든 행에 대해 새로 생성 된 컬럼에 NULL을 삽입을 시도하고 있습니다. 당신은 나중에 NOT NULL로 다음 NULL을 허용으로 열을 추가 원하는 값으로 열을 작성하고 설정해야합니다.

  4. ==============================

    4.당신도 필요 기본을 정의하거나 숀 말한다 일을하고 기존 행에에 채워 때까지 널 제약없이 추가 할 수 있습니다.

    당신도 필요 기본을 정의하거나 숀 말한다 일을하고 기존 행에에 채워 때까지 널 제약없이 추가 할 수 있습니다.

  5. ==============================

    5.기본값을 가정 것 또한 작업을 디폴트 값을 지정하면 적절하다.

    기본값을 가정 것 또한 작업을 디폴트 값을 지정하면 적절하다.

  6. ==============================

    6.또는, 여분의 열이 온도 등의 새로운 테이블을 생성 비 - 널 새로운 컬럼을 채울 필요로 조작하면서 새로운 테이블로 데이터를 복사 한 후 두 단계의 이름 변경을 통해 테이블을 바꿔.

    또는, 여분의 열이 온도 등의 새로운 테이블을 생성 비 - 널 새로운 컬럼을 채울 필요로 조작하면서 새로운 테이블로 데이터를 복사 한 후 두 단계의 이름 변경을 통해 테이블을 바꿔.

    예, 그것은 더 복잡하지만 라이브 테이블에 큰 업데이트를하지 않으려면 당신은이 방법을 수행해야 할 수 있습니다.

  7. ==============================

    7.이 쿼리는 널 (null)을 자동으로 업데이트합니다

    이 쿼리는 널 (null)을 자동으로 업데이트합니다

    ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) DEFAULT 'whatever' NOT NULL;
    
  8. ==============================

    8.이것은 나를 위해 일한 : :)

    이것은 나를 위해 일한 : :)

    ALTER TABLE your_table_name ADD COLUMN new_column_name int;
    
  9. from https://stackoverflow.com/questions/512451/how-can-i-add-a-column-to-a-postgresql-database-that-doesnt-allow-nulls by cc-by-sa and MIT license