SQLSTATE 22014Severity lowLab verified

Incident brief

ntile argument must be positive

The ntile(n) window function divides rows into n ranked buckets and requires n to be a positive integer; zero or a negative bucket count raises this data exception.

Reproduced on PostgreSQL 18.4Verified 2026-07-24 (isolated lab, PostgreSQL 18.4)Reviewed by Verified against PostgreSQL 18.4 in an isolated lab environment

In 10 seconds

What
ntile argument must be positive
What triggers it
Use ntile(n) OVER (...) with n set to zero or a negative value.
The fix
Pass a positive bucket count to ntile().
Proof
Reproduced on PostgreSQL 18.4 → A single windowed SELECT reproduces SQLSTATE 22014; ntile refuses the non-positive bucket count.

The fix

What to do right now

The immediate, application-level response to this error.

  • Pass a positive bucket count to ntile().
  • Validate a dynamic bucket count (GREATEST(n, 1)) before it reaches the window function.
Fix — SQL
-- ntile needs a positive number of buckets.
SELECT ntile(2) OVER (ORDER BY g) FROM generate_series(1,3) g;

Related & next steps

Follow the thread

Everything this error touches — jump straight to the sibling error, term, runbook, or parameter.

Verification

PG 18.4
Last verified
2026-07-24 (isolated lab, PostgreSQL 18.4)
Reviewed by
Verified against PostgreSQL 18.4 in an isolated lab environment
Audit status
reviewed