Introduction to PostgreSQL citext Data Type
The citext
data type in PostgreSQL is a case-insensitive text type that allows ignoring case when performing text comparisons. citext
is developed based on the text
data type and provides a convenient way to perform text comparisons in the database without considering case sensitivity.
Syntax
The citext
data type can be defined using the following syntax:
CREATE TABLE table_name (
column_name CITEXT
);
In this syntax, table_name
is the name of the table, column_name
is the name of the column, and citext
specifies the data type as citext
.
Use Cases
The citext
type is typically used for storing text data that needs to ignore case sensitivity, such as usernames, passwords, etc. By using the citext
data type, text comparisons can be more convenient and efficient.
Examples
Here are two examples of using the citext
data type, demonstrating how to use it in a table and how to perform case-insensitive comparisons using citext
.
Example 1
Assuming we have a table named users
that contains user information including usernames and passwords. To ignore case when comparing usernames and passwords, we can use the citext
type to define these two columns. Here is the SQL statement to create the users
table:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username CITEXT,
password CITEXT
);
Now, we can insert some data into the users
table as follows:
INSERT INTO users (username, password) VALUES
('Alice', 'password1'),
('bob', 'PASSWORD2'),
('charlie', 'PaSsWoRd3');
Next, we can use the following query statement to find users with the password ‘password2’:
SELECT * FROM users WHERE password = 'password2';
This query will not return any results because the data stored in the password
column is of citext
type, which ignores case sensitivity. So we need to use citext
type for case-insensitive comparisons. Here is the correct query statement:
SELECT * FROM users WHERE password = 'password2'::citext;
This query will return the record of the user ‘bob’ because his password is ‘PASSWORD2’, and after converting to ::citext
, the query condition becomes case-insensitive comparison.
Example 2
Assuming we have a table named students
that contains student information including names and emails. We want to ignore case when comparing emails. Here is the SQL statement to create the students
table:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name TEXT,
email CITEXT
);
Now, we can insert some sample data into the students
table, for example:
INSERT INTO students (name, age, email, address) VALUES
('Alice', 20, '[email protected]', '123 Main St'),
('Bob', 22, '[email protected]', '456 Market St'),
('Charlie', 19, '[email protected]', '789 Broadway');
This will insert information of 3 students, including name, age, email, and address, into the students
table.
Now, we can use SELECT
statement to retrieve data from the students
table, for example:
SELECT * FROM students;
The above will return the following results:
id | name | age | email | address
----+----------+-----+---------------------+---------------
1 | Alice | 20 | [email protected] | 123 Main St
2 | Bob | 22 | [email protected] | 456 Market St
3 | Charlie | 19 | [email protected] | 789 Broadway
From the above results, it can be seen that we have successfully inserted sample data into the students
table and are able to retrieve this data.
Conclusion
The citext
data type in PostgreSQL is a case-insensitive text type that allows for case-insensitive text comparison. citext
is developed on top of the text
data type and provides a convenient way to perform text comparison in the database without considering the case.