Professional Documents
Culture Documents
PostgreSQL CHECK Constraints
PostgreSQL CHECK Constraints
Summary: in this tutorial, you will learn about the PostgreSQL CHECK constraints and how
to use them to constrain values in columns of a table based on a boolean expression.
Create a free Postgres Database in 0.3 seconds on Neon. Ship faster with database branching.
Handle peaks efficiently with autoscaling.
Sponsored
A check constraint allows you to enforce data integrity rules at the database level. A check
constraint uses a boolean expression to evaluate the values, ensuring that only valid data is
inserted or updated in a table.
Typically, you create a check constraint when creating a table using the CREATE TABLE
statement:
In this syntax:
• First, specify the constraint name after the CONSTRAINT keyword. This is
optional. If you omit it, PostgreSQL will automatically generate a name for the
CHECK constraint.
• Second, define a condition that must be satisfied for the constraint to be valid.
If the CHECK constraint involves only one column, you can define it as a column constraint
like this:
By default, PostgreSQL assigns a name to a CHECK constraint using the following format:
{table}_{column}_check
To add a CHECK constraint to an existing table, you use the ALTER TABLE ... ADD
CONSTRAINT statement:
To drop a CHECK constraint, you use the ALTER TABLE ... DROP CONSTRAINT statement:
First, create a new table called employees with some CHECK constraints:
In this statement, the employees table has one CHECK constraint that enforces the
values in the salary column greater than zero.
Second, attempt to insert a new row with a negative salary into the employees table:
Error:
ERROR: new row for relation "employees" violates check constraint "employees_salary_che
DETAIL: Failing row contains (1, John, Doe, 1972-01-01, 2015-07-01, -100000).
The insert fails because the CHECK constraint on the salary column accepts only
positive values.
First, use the ALTER TABLE ... ADD CONSTRAINT statement to add a CHECK constraint to
the employees table:
The CHECK constraint ensures that the joined date is later than the birthdate.
Second, attempt to insert a new row into the employees table with the joined date is
earlier than the birth date:
INSERT INTO employees (first_name, last_name, birth_date, joined_date, salary)
VALUES ('John', 'Doe', '1990-01-01', '1989-01-01', 100000);
Output:
ERROR: new row for relation "employees" violates check constraint "joined_date_check"
DETAIL: Failing row contains (2, John, Doe, 1990-01-01, 1989-01-01, 100000).
The output indicates that the data violates the check constraint “joined_date_check”.
The following example adds a CHECK constraint to ensure that the first name has at least
3 characters:
In this example, we define a condition using the TRIM() and LENGTH() functions:
• First, the TRIM() function removes leading and trailing whitespaces from the
first_name.
• Second, the LENGTH() function returns the character length of the result of the
TRIM() function.
The whole expression LENGTH(TRIM(first_name)) >= 3 ensures the first name contains
three or more characters.
The following statement will fail because it attempts to insert a row into the employees
table with the first name that has 2 characters:
Error:
ERROR: new row for relation "employees" violates check constraint "first_name_check"
DETAIL: Failing row contains (4, Ab, Doe, 1990-01-01, 2008-01-01, 100000).
The following statement removes the CHECK constraint joined_date_check from the
employees table:
Summary
• Use PostgreSQL CHECK constraint to check the values of columns based on a
boolean expression.