preferJsonb
Diagnostic Category: lint/safety/preferJsonb
Since: vnext
Sources:
- Inspired from: eugene/E3
Description
Prefer JSONB over JSON types.
JSONB is the binary JSON data type in PostgreSQL that is more efficient for most use cases. Unlike JSON, JSONB stores data in a decomposed binary format which provides several advantages:
- Significantly faster query performance for operations like indexing and searching
- Support for indexing (GIN indexes)
- Duplicate keys are automatically removed
- Keys are sorted
The only reasons to use JSON instead of JSONB are:
- You need to preserve exact input formatting (whitespace, key order)
- You need to preserve duplicate keys
- You have very specific performance requirements where JSON's lack of parsing overhead matters
Examples
Invalid
CREATE TABLE users (
data json
);
code-block.sql:1:1 lint/safety/preferJsonb ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
! Prefer JSONB over JSON for better performance and functionality.
> 1 │ CREATE TABLE users (
│ ^^^^^^^^^^^^^^^^^^^^
> 2 │ data json
> 3 │ );
│ ^^
4 │
i JSON stores exact text representation while JSONB stores parsed binary format. JSONB is faster for queries, supports indexing, and removes duplicate keys.
i Consider using JSONB instead unless you specifically need to preserve formatting or duplicate keys.
ALTER TABLE users ADD COLUMN metadata json;
code-block.sql:1:1 lint/safety/preferJsonb ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
! Prefer JSONB over JSON for better performance and functionality.
> 1 │ ALTER TABLE users ADD COLUMN metadata json;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 │
i JSON stores exact text representation while JSONB stores parsed binary format. JSONB is faster for queries, supports indexing, and removes duplicate keys.
i Consider using JSONB instead unless you specifically need to preserve formatting or duplicate keys.
ALTER TABLE users ALTER COLUMN data TYPE json;
code-block.sql:1:1 lint/safety/preferJsonb ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
! Prefer JSONB over JSON for better performance and functionality.
> 1 │ ALTER TABLE users ALTER COLUMN data TYPE json;
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2 │
i JSON stores exact text representation while JSONB stores parsed binary format. JSONB is faster for queries, supports indexing, and removes duplicate keys.
i Consider using JSONB instead unless you specifically need to preserve formatting or duplicate keys.
Valid
CREATE TABLE users (
data jsonb
);
ALTER TABLE users ADD COLUMN metadata jsonb;
ALTER TABLE users ALTER COLUMN data TYPE jsonb;
How to configure
{
"linter": {
"rules": {
"safety": {
"preferJsonb": "error"
}
}
}
}