PostgreSQL: operator does not exist (type mismatch)
ERROR: operator does not exist: integer = textA comparison put two different types on each side, such as integer and text, and Postgres has no operator for that pair. Cast one side to match the other. This is the type-mismatch form of the operator-does-not-exist error.
What this error means
This is the same class of error as operator does not exist, framed for its most common trigger: comparing mismatched types. A HINT suggests adding explicit type casts.
It usually comes from a driver binding a parameter as text against a typed column, or comparing an enum or uuid column to a bare string.
How to fix it
Comparing integer to text
Cast the literal or parameter to the column's type.
SELECT * FROM t WHERE id = $1::int;Comparing an enum to a string
Cast the string to the enum type.
SELECT * FROM t WHERE status = 'active'::order_status;The driver binds parameters as text
Configure the client to send typed parameters, or cast in the SQL.
How to avoid it next time
- Align parameter and column types so comparisons resolve without casts.
- Cast string literals to enum or uuid types when comparing against those columns.
Frequently asked questions
Why does uuid = text fail?
A uuid column and a text literal have no comparison operator. Cast the literal: uuid_col = '...'::uuid.
Is this the same as 'operator does not exist'?
Yes, same SQLSTATE 42883. This is the common type-mismatch case, called out because so many people hit it that way.
Stop struggling with SQL
Use FluentDB, the AI database client for macOS.
Related errors
Part of the PostgreSQL error reference. Last reviewed 2026-07-31.