PostgreSQL で Not 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 の使用を容易にする多くのことの 1つは、テーブルが既に作成されている場合でも、いつでも追加の制約を追加できる方法です。 次のコードを使用してこれを試すことができます。
まず、テーブルを作成します。
CREATE TABLE users(
user_id int PRIMARY KEY,
user_name VARCHAR (100) UNIQUE,
"e-mail" VARCHAR (300)
);
テーブルが作成されます。 ただし、NOT NULL
制約を追加するのを忘れたことに気付いた場合は、2つの方法でこれを行うことができます。 最初のものはもう少し作業が必要です。 次に示すように、最初に既存のテーブルを削除して、新しいテーブルを作成します。
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
キーも含まれるため、要件によっては除外することもできます。
この後、上記のコードを使用して、必要なすべての列の制約を削除します。 これは、テーブルの列に NOT NULL
制約を追加および削除するために PostgreSQL が提供する簡単な方法です。
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