What is the difference between Postgres and PostgREST?

postgresql postgrest
Postgres database beside a PostgREST API layer

People mash the names together because they share a root. They are not the same thing. Postgres is the database. PostgREST is a server that reads your Postgres schema and exposes it over HTTP. If you confuse the two on a vendor call, you will buy the wrong layer and wonder why nothing feels finished.

Postgres in one breath

PostgreSQL (Postgres for short) is where rows live. Tables, indexes, constraints, transactions, backups. It is the long memory of the product. When money moves, when a user owns a record, when a report must match last Tuesday, you want Postgres doing that work.

Postgres does not speak HTTP to browsers by itself. Your app, or some API layer, has to sit in front of it.

PostgREST in one breath

PostgREST is a standalone web server. You point it at a Postgres database. It looks at schemas, tables, views, and functions, then serves a REST API shaped by that structure. Permissions in the database become permissions on the API. You spend less time writing the same create and update handlers by hand.

The PostgREST docs put it plainly: the database is the source of truth for the API shape. That is the whole pitch.

The difference that matters to a founder

Layer Job If it fails
Postgres Store and protect data You lose correctness, history, or uptime
PostgREST Expose data over HTTP from the schema Clients cannot talk to the database cleanly

You can run Postgres for years without PostgREST. Plenty of products use Rails, Node, or Go as the API. You cannot run PostgREST without Postgres. One is the vault. The other is a door with rules.

Why teams reach for PostgREST

Hand written CRUD often reimplements what the database already knows: foreign keys, check constraints, row filters. PostgREST leans on that instead of hiding it behind an ORM that fights the schema.

For internal tools and early products, that speed is real. Define tables and views. Set roles. Ship a usable API. Pair it with a thin front end and you have a working system without a custom backend for every form.

What PostgREST does not buy you

It is not a full application platform. Complex workflows, multi step payments, weird third party glue, and heavy business rules still need code somewhere. DreamFactory style writeups on PostgREST are honest about this: great at schema driven REST, thin if you expected a complete backend product.

Row level security and careful roles are not optional. If every table is wide open to the anon role, you did not get an API. You got a public SQL hole with JSON on top.

How this shows up in quotes and stacks

Vendors say "Postgres API" and mean three different things:

  1. Raw Postgres only (you build the API).
  2. PostgREST or a PostgREST flavored layer (schema is the API).
  3. A batteries included host like Supabase that uses PostgREST under the hood plus auth and storage.

Ask which one. Ask where authorization is enforced. Ask who owns migrations when the API shape changes.

A simple decision rule

Use Postgres because you need durable product data. That decision stands alone.

Add PostgREST when your API is mostly "read and write these tables under these rules" and you want the schema to stay honest. Skip it when your domain logic is the product and the database is just storage behind a deliberate service boundary.

If you are still deciding whether a schema driven API is enough, read When is REST from the database enough?.

Work with Kleto

I am James Cowan, a product engineer and the founder of Kleto. Kleto is a product engineering agency that ships production software from strategy through handoff. We help teams pick the right boundary between the database and the API before that choice becomes expensive. If that matches your stack, contact Kleto and we will scope a sensible first step.

Recommended

What is PostgreSQL, and why do products still bet on it? @jameslcowanapr 29 '26 postgresql, product-engineering
When is REST from the database enough? @jameslcowanjun 3 '26 postgrest, postgresql
How do you connect a simple front end to a typed API? @jameslcowanjul 16 '26 typescript, javascript
What is SQLite good for at the edge of a system? @jameslcowanjul 13 '26 sqlite, postgresql
What is Supabase, and what are you actually buying? @jameslcowanmay 28 '26 supabase, postgresql
What is Drizzle, and why do teams treat the schema as a contract? @jameslcowanmay 12 '26 drizzle, typescript
What is Neon, and how do preview databases change shipping? @jameslcowanmay 7 '26 neon, postgresql
How do types go from the database to the client? @jameslcowanapr 8 '26 typescript, drizzle
What is the difference between product engineering and \"just development\"? @jameslcowanjul 9 '26 product-engineering, startups
What is observability when you do not have a platform team? @jameslcowanjul 1 '26 observability, product-engineering
What is the total cost of \"we will just use X\"? @jameslcowanjun 24 '26 smb, product-engineering
What makes an internal tool survive the first hire? @jameslcowanjun 18 '26 smb, documentation
What does \"full stack\" mean on a vendor quote? @jameslcowanjun 10 '26 smb, product-engineering
What is React, and when is the weight worth it? @jameslcowanapr 22 '26 react, javascript
What is the difference between Bun and Node? @jameslcowanapr 14 '26 bun, javascript
What is TypeScript, and why do product teams still adopt it? @jameslcowanmar 31 '26 typescript, javascript
Anthropic Trained Its Replacement @jameslcowanjun 9 '26 anthropic, ai
Karpathy Was Wrong: OpenClaw Still Outruns Its 5 Real Alternatives @jameslcowanjun 11 '26 openclaw, ai
OpenClaw: What It Is and How to Get the Most Out of It @jameslcowanjun 5 '26 openclaw, javascript
Pydantic: The Open Source Layer Quietly Running the AI Economy @jameslcowanjun 22 '26 pydantic, python
The YC S26 Deadline Just Closed. Here's What Separates the 1.5% From Everyone Else. @jameslcowanjun 17 '26 startups, yc
OpenClaw 2026.2.23: The Agent Browser Upgrade @jameslcowanjun 19 '26 openclaw, ai
Why I Skipped the CMS @jameslcowanjun 10 '26 markdown, static-site-generation
Fixing Navigation and Analytics: When Your Data Lies About User Behavior @jameslcowanjun 5 '26 htmx, javascript
HAL: Cutting 100-300KB of JavaScript by Moving Routing to Build Time @jameslcowanjun 10 '26 htmx, javascript
Mobile-First Layout That Ships: How PrimaryLayout Solves Real UX Problems @jameslcowanjun 6 '26 htmx, css
Documentation That Scales: Constitution, Contracts, and Runbooks @jameslcowanjun 8 '26 documentation, markdown
Zero-Server Analytics: How I Replaced a SaaS Bill with Netlify Functions and GitHub @jameslcowanjun 8 '26 netlify, analytics
Web Components + HTMX: A Lean Architecture for Content Sites That Ship @jameslcowanjun 10 '26 web-components, javascript
HAL: Build-Time Link Rewriting That Makes Navigation Feel Instant @jameslcowanjun 18 '26 htmx, javascript
Why I Built My Own Analytics Pipeline (And What It Actually Costs) @jameslcowanjun 18 '26 analytics, javascript
The Static Site Playbook: Shipping a Content Product on a Near-Zero Budget @jameslcowanjun 11 '26 static-site-generation, javascript
How This Site Works: Architecture for a One-Person Team @jameslcowanjun 8 '26 htmx, javascript
Web Components as a Business Decision @jameslcowanjun 11 '26 web-components, javascript
Progressive Enhancement with HTMX: Ship Fast, Degrade Gracefully @jameslcowanjun 8 '26 htmx, javascript
Less JavaScript, More Leverage: Why I Ship With a 35KB Budget @jameslcowanjun 22 '26 javascript, performance
Static Site Generation: The Business Case for Pre-Rendered HTML @jameslcowanjun 14 '26 static-site-generation, performance

Recommended

What is PostgreSQL, and why do products still bet on it? @jameslcowanapr 29 '26 postgresql, product-engineering
When is REST from the database enough? @jameslcowanjun 3 '26 postgrest, postgresql
How do you connect a simple front end to a typed API? @jameslcowanjul 16 '26 typescript, javascript
What is SQLite good for at the edge of a system? @jameslcowanjul 13 '26 sqlite, postgresql
What is Supabase, and what are you actually buying? @jameslcowanmay 28 '26 supabase, postgresql
What is Drizzle, and why do teams treat the schema as a contract? @jameslcowanmay 12 '26 drizzle, typescript
What is Neon, and how do preview databases change shipping? @jameslcowanmay 7 '26 neon, postgresql
How do types go from the database to the client? @jameslcowanapr 8 '26 typescript, drizzle
What is the difference between product engineering and \"just development\"? @jameslcowanjul 9 '26 product-engineering, startups
What is observability when you do not have a platform team? @jameslcowanjul 1 '26 observability, product-engineering
What is the total cost of \"we will just use X\"? @jameslcowanjun 24 '26 smb, product-engineering
What makes an internal tool survive the first hire? @jameslcowanjun 18 '26 smb, documentation
What does \"full stack\" mean on a vendor quote? @jameslcowanjun 10 '26 smb, product-engineering
What is React, and when is the weight worth it? @jameslcowanapr 22 '26 react, javascript
What is the difference between Bun and Node? @jameslcowanapr 14 '26 bun, javascript
What is TypeScript, and why do product teams still adopt it? @jameslcowanmar 31 '26 typescript, javascript
Anthropic Trained Its Replacement @jameslcowanjun 9 '26 anthropic, ai
Karpathy Was Wrong: OpenClaw Still Outruns Its 5 Real Alternatives @jameslcowanjun 11 '26 openclaw, ai
OpenClaw: What It Is and How to Get the Most Out of It @jameslcowanjun 5 '26 openclaw, javascript
Pydantic: The Open Source Layer Quietly Running the AI Economy @jameslcowanjun 22 '26 pydantic, python
The YC S26 Deadline Just Closed. Here's What Separates the 1.5% From Everyone Else. @jameslcowanjun 17 '26 startups, yc
OpenClaw 2026.2.23: The Agent Browser Upgrade @jameslcowanjun 19 '26 openclaw, ai
Why I Skipped the CMS @jameslcowanjun 10 '26 markdown, static-site-generation
Fixing Navigation and Analytics: When Your Data Lies About User Behavior @jameslcowanjun 5 '26 htmx, javascript
HAL: Cutting 100-300KB of JavaScript by Moving Routing to Build Time @jameslcowanjun 10 '26 htmx, javascript
Mobile-First Layout That Ships: How PrimaryLayout Solves Real UX Problems @jameslcowanjun 6 '26 htmx, css
Documentation That Scales: Constitution, Contracts, and Runbooks @jameslcowanjun 8 '26 documentation, markdown
Zero-Server Analytics: How I Replaced a SaaS Bill with Netlify Functions and GitHub @jameslcowanjun 8 '26 netlify, analytics
Web Components + HTMX: A Lean Architecture for Content Sites That Ship @jameslcowanjun 10 '26 web-components, javascript
HAL: Build-Time Link Rewriting That Makes Navigation Feel Instant @jameslcowanjun 18 '26 htmx, javascript
Why I Built My Own Analytics Pipeline (And What It Actually Costs) @jameslcowanjun 18 '26 analytics, javascript
The Static Site Playbook: Shipping a Content Product on a Near-Zero Budget @jameslcowanjun 11 '26 static-site-generation, javascript
How This Site Works: Architecture for a One-Person Team @jameslcowanjun 8 '26 htmx, javascript
Web Components as a Business Decision @jameslcowanjun 11 '26 web-components, javascript
Progressive Enhancement with HTMX: Ship Fast, Degrade Gracefully @jameslcowanjun 8 '26 htmx, javascript
Less JavaScript, More Leverage: Why I Ship With a 35KB Budget @jameslcowanjun 22 '26 javascript, performance
Static Site Generation: The Business Case for Pre-Rendered HTML @jameslcowanjun 14 '26 static-site-generation, performance