programing

Postgresql 데이터베이스에서 null을 허용하지 않는 열을 추가하려면 어떻게 해야 합니까?

showcode 2023. 5. 5. 10:04
반응형

Postgresql 데이터베이스에서 null을 허용하지 않는 열을 추가하려면 어떻게 해야 합니까?

다음 쿼리(인터넷에 적합)를 사용하여 Postgresql 데이터베이스에 새 "NOT NULL" 열을 추가합니다.

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

이 쿼리를 실행할 때마다 다음 오류 메시지가 표시됩니다.

ERROR:  column "mycolumn" contains null values

당황스럽네요.제가 어디서 잘못되고 있나요?

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

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

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;

다른 사용자가 관찰한 것처럼 null 가능한 열을 만들거나 기본값을 제공해야 합니다.이 방법이 충분히 유연하지 않은 경우(예: 각 행에 대해 개별적으로 계산할 새 값이 필요한 경우) Postgre에서 다음과 같은 사실을 사용할 수 있습니다.SQL, 트랜잭션 내에서 모든 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;

테이블에 행이 이미 존재하기 때문에ALTER문을 삽입하려고 합니다.NULL모든 기존 행에 대해 새로 생성된 열로 이동합니다.다음과 같이 열을 추가해야 합니다.NULL그런 다음 원하는 값으로 열을 채우고 다음으로 설정합니다.NOT NULL사후에

기본값을 정의하거나 Sean이 말하는 대로 기존 행에 입력할 때까지 null 제약 조건 없이 기본값을 추가해야 합니다.

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

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

기본값이 적절한 경우 기본값을 지정하는 것도 효과적입니다.

또는 추가 열을 사용하여 새 테이블을 임시로 만들고 필요에 따라 데이터를 이 새 테이블에 복사하여 null이 불가능한 새 열을 채우도록 조작한 다음 2단계 이름 변경을 통해 테이블을 스왑합니다.

예, 더 복잡하지만 실시간 테이블에서 큰 업데이트를 원하지 않는 경우 이 방법을 사용해야 할 수도 있습니다.

이것은 나에게 효과가 있었습니다 :)

ALTER TABLE your_table_name ADD COLUMN new_column_name int;

언급URL : https://stackoverflow.com/questions/512451/how-can-i-add-a-column-that-doesnt-allow-nulls-in-a-postgresql-database

반응형