PostgreSQL에서 Null이 아닌 제약 조건 삭제

Bilal Shahid 2023년6월20일
  1. NOT NULL 제약 조건 사용의 중요성
  2. PostgreSQL에서 Not Null 제약 조건 적용
  3. PostgreSQL에서 Not Null 제약 조건 삭제
PostgreSQL에서 Null이 아닌 제약 조건 삭제

NOT NULL 제약 조건은 PostgreSQL에서 매우 유용한 도구입니다. 그러나 사용하기가 약간 까다로울 수 있습니다. 이 문서에서는 데이터베이스에서 원하는 결과를 얻기 위해 적용 및 삭제하는 방법에 대해 설명합니다.

NOT NULL 제약 조건 사용의 중요성

제약 조건은 입력된 데이터가 요구 사항에 맞게 정렬되도록 테이블의 열에 적용되는 사전 설정 규칙으로 정의할 수 있습니다.

이는 특히 여러 관계가 있는 광범위한 데이터베이스에 많은 데이터가 있는 경우 큰 문제가 되는 경향이 있는 잘못된 데이터 입력을 방지합니다. 원하는 만큼 제약 조건을 적용하거나 전혀 적용하지 않을 수 있습니다.

NOT NULL 제약 조건은 테이블의 모든 열에 추가할 수 있는 특정 제약 조건입니다. 이름에서 알 수 있듯이 해당 열의 각 행에 있는 항목이 NULL이 되지 않도록 합니다.

이는 NULL이 될 수 없는 PRIMARY 키를 처리할 때 특히 중요합니다. NULL 값이 포함될 때 관계를 만들 수 없거나 종종 잘못 수행되므로 관계를 설정할 때도 필요합니다.

또한 사용자가 실수로 항목을 건너뛰는 것을 방지합니다. 이제 PostgreSQL에서 NOT NULL 제약 조건을 적용하는 방법을 알아보겠습니다.

PostgreSQL에서 Not Null 제약 조건 적용

NOT NULL 제약 조건을 적용하는 것은 보기보다 어렵지 않습니다. 대부분의 경우 추가 코드 행일 뿐입니다. 상황에 따라 다음 방법 중 하나를 사용할 수 있습니다.

테이블을 생성하는 동안 NOT NULL 제약 조건 추가

열에 NOT NULL 제약 조건을 추가하는 가장 좋은 시간은 생성하는 동안입니다. 다음과 같이 NOT NULL을 옆에 추가하기만 하기 때문입니다.

CREATE TABLE name(
    column_1 int PRIMARY KEY,
    column_2 VARCHAR (100),
    column_3 VARCHAR (300) NOT NULL
);

여기에서 NOT NULL 제약 조건이 column_3에 추가됩니다.

기존 테이블에 NOT NULL 제약 조건 추가

PostgreSQL을 쉽게 사용할 수 있는 많은 이유 중 하나는 테이블이 이미 생성된 경우에도 항상 추가 제약 조건을 추가할 수 있는 방법입니다. 다음 코드를 사용하여 이를 시도해 볼 수 있습니다.

먼저 테이블을 만듭니다.

CREATE TABLE users(
    user_id int PRIMARY KEY,
    user_name VARCHAR (100) UNIQUE,
    "e-mail" VARCHAR (300)
);

테이블을 생성합니다. 그러나 NOT NULL 제약 조건을 추가하는 것을 잊은 경우 두 가지 방법으로 이를 수행할 수 있습니다. 첫 번째는 조금 더 많은 작업이 필요합니다. 먼저 아래와 같이 기존 테이블을 삭제하고 새 테이블을 만듭니다.

DROP TABLE users;

그런 다음 아래와 같이 not null 제약 조건을 사용하여 테이블을 다시 만듭니다.

CREATE TABLE users(
    user_id int PRIMARY KEY,
    user_name VARCHAR (100) UNIQUE,
    "e-mail" VARCHAR (300) NOT NULL
);

이 방법은 효과가 있지만 약간의 시간이 소요됩니다. 훨씬 간단한 대안은 아래와 같이 ALTER TABLE 명령을 사용하는 것입니다.

ALTER TABLE users 
ALTER COLUMN "e-mail" set not null;

이렇게 하면 NOT NULL 제약 조건이 e-mail 열에 추가됩니다. 또한 이를 위해 테이블을 삭제할 필요가 없습니다.

PostgreSQL에서 Not Null 제약 조건 삭제

데이터베이스를 편집하는 동안 NOT NULL 제약 조건이 필요하지 않거나 잘못 배치되었음을 알 수 있습니다. 이와 같은 경우 NOT NULL 제약 조건을 제거하거나 삭제하는 방법을 알아야 합니다. 다음은 몇 가지 방법입니다.

개별 열에서 NOT NULL 제약 조건 삭제

개별 열에서 제약 조건을 삭제하려는 경우 동일한 ALTER TABLE 명령을 사용하여 쉽게 수행할 수 있지만 지금 제약 조건을 제거하고 있기 때문에 약간의 차이가 있습니다. 아래 코드를 사용하여 이를 달성할 수 있습니다.

ALTER TABLE users
ALTER COLUMN "e-mail" drop not null;

e-mail 열에서 Postgres NOT NULL 제약 조건을 빠르게 삭제할 수 있습니다. 전체 테이블을 삭제하고 원하는 열에 NOT NULL 제약 조건을 추가하지 않고 다시 생성하는 것보다 더 나은 대안입니다.

여러 열에서 NOT NULL 제약 조건 삭제

다양한 열에서 제약 조건을 삭제하려면 위의 코드를 여러 번 사용할 수 있습니다.

ALTER TABLE users
ALTER COLUMN "e-mail" drop not null;

ALTER TABLE users
ALTER COLUMN new_column drop not null;

그러나 이것은 약간의 시간이 소요될 수 있습니다. 다행히 PostgreSQL은 다음과 같이 NOT NULL을 삭제하는 데 사용할 수 있는 대안을 제공합니다.

ALTER TABLE users
ALTER COLUMN "e-mail" drop not null,
ALTER COLUMN new_column drop not null;

이렇게 하면 한 번에 여러 열의 NOT NULL 제약 조건을 삭제할 수 있습니다.

PostgreSQL에서 모든 Not Null 제약 조건 삭제

위의 방법은 변경해야 하는 열이 많지 않은 경우에 유용할 수 있습니다. 그러나 열이 많은 테이블에서 모든 NOT NULL 제약 조건을 삭제하려는 경우 필요한 모든 열을 식별하기 어려울 수 있습니다.

이를 위해 아래 코드를 사용할 수 있습니다.

SELECT x.attname
FROM pg_catalog.pg_attribute x
WHERE attrelid = 'users'::regclass
AND x.attnum > 0
AND NOT x.attisdropped
AND x.attnotnull;

NOT NULL 제약 조건이 있는 모든 열을 필터링합니다. 그러나 여기에는 요구 사항에 따라 제외할 수 있는 PRIMARY 키도 포함됩니다.

그런 다음 위의 코드를 사용하여 필요한 모든 열에 대한 제약 조건을 삭제합니다. 이는 PostgreSQL이 테이블의 열에 NOT NULL 제약 조건을 추가 및 삭제하기 위해 제공하는 간단한 방법입니다.

작가: Bilal Shahid
Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub