SQLSTATE 28000 FATAL Class 28: Invalid Authorization Specification

invalid_authorization_specification no PostgreSQL user name specified in startup packet — 28000

PostgreSQL error “no PostgreSQL user name specified in startup packet — 28000” (SQLSTATE 28000): what it means, common causes, and how to fix it.

PG 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18 Official docs
Last reviewed Jun 2026 Grounded in source

Diagnostic Queries

Symptoms

A connection’s startup packet did not specify a PostgreSQL user name. PostgreSQL rejects it with SQLSTATE 28000 (invalid_authorization_specification).

  • The startup packet omitted the user.
  • Usually a malformed client or proxy.
  • A user name is mandatory to connect.

What the server log shows

FATAL:  no PostgreSQL user name specified in startup packet

Why PostgreSQL raises this — what the manual says

Section 54.2.1 Start-up:

“To begin a session, a frontend opens a connection to the server and sends a startup message.”

The protocol’s startup message must carry a user name to establish the session’s authorization identity. A startup packet without one cannot be authenticated, so PostgreSQL reports 28000.

Common causes

  • A misconfigured client/driver not sending a user.
  • A proxy/pooler mangling the startup packet.
  • A non-PostgreSQL client speaking the protocol incorrectly.

How to fix it

  1. Provide a user in the connection string/driver configuration.
  2. Fix the proxy/pooler so it forwards the user name.
  3. Verify the client speaks the PostgreSQL protocol correctly.

Related & next steps

Reference: PostgreSQL 18 Section 53.2 “Message Flow”.

Was this helpful?