PostgreSQL

Your quote says PostgreSQL. That's the line holding every record you own.

The short answer

PostgreSQL is a free, open-source relational database. It stores records in tables that reference each other, and it guarantees that a multi-step change either completes in full or leaves nothing behind. That guarantee is why it's the default for anything holding money or records. You pay for hosting, not for the software.

Somebody wrote PostgreSQL into your proposal and didn't stop to explain it, probably because in their world it barely needs explaining. It's worth understanding rather than nodding at, because the database is where your records sit for as long as the business runs.

Tables, rows, and a promise about half-finished work

Picture a spreadsheet with rules it enforces. A table holds one kind of thing: customers, or invoices, or work orders. A row is one of them, and each column decides in advance what it will accept.

The relational part is the pointing. An invoice doesn't repeat the customer's address inside itself. It points at the customer, who exists once. Change that address and every invoice pointing at it is now correct, because there was only one copy to change.

The second half rarely makes it into a proposal. Taking a payment and marking the order paid are two separate writes. A relational database wraps them into one unit and promises that either both happen or neither does, even if the power cuts between them. You don't end up with a charged card and no order. When somebody says a database is ACID compliant, that promise is the claim.

  1. 01

    Open a transaction

    The database sets aside a private working space. Nothing changed inside it is visible to anyone else yet.

  2. 02

    Record the payment

    A row is written saying the money arrived. Real inside this transaction, invisible outside it.

  3. 03

    Mark the order paid

    A second row changes. Two separate writes, one unit of work as far as the database is concerned.

  4. 04

    Commit, or nothing

    Commit and both land together. Crash, fail or lose power first and neither one ever existed.

One transaction, two changes. Both become real at the same instant, and a crash at any point before that leaves the database exactly as it was before the first step.

Boring and correct is the whole point

PostgreSQL began as a research project at Berkeley in the 1980s and took on SQL along with its current name in the mid-nineties. It was built by people arguing about correctness rather than by a company shipping against a quarter, and it still isn't owned by anybody. No vendor, no seat count, no licence to renegotiate. Some other databases are open source in the same sense only until the company behind them changes the licence.

That shows up as constraints, which are rules you hand to the database rather than to the application. An invoice must belong to a customer that exists. An email address can appear once. A quantity can't go negative. Set those and the database refuses bad data even when the code writing it has a bug, and code eventually has a bug.

It's also the answer everybody already gives. PostgreSQL has sat at the top of the most-used-database list in recent Stack Overflow developer surveys, and that matters commercially rather than technically. You can hire for it, get three firms to quote the same job, and run it on every cloud there is. A major version arrives yearly and is supported for about five, which is the right pace for the thing holding your records.

It has absorbed most of the reasons to add a second database

Projects used to collect databases. One for the records, one for search, one for anything that didn't sit neatly in a table. Much of that has quietly stopped being necessary.

PostgreSQL stores JSON documents and can index inside them, so the variable part of your data lives in the same table as the strict part. Full-text search is built in. Extensions, which are bolt-on modules that add capability without anyone forking the software, cover geographic data, the vector storage AI features want, and time-series work. Most managed hosts offer the common ones behind a checkbox.

A dedicated search engine still handles typos and relevance tuning better, and a dedicated cache is faster for data rewritten constantly that doesn't need to survive a restart. The question is whether you're past the volume where that shows. Most businesses aren't, and the way to find out is to start with one and add the second when something measurable says to.

PostgreSQL alone

A specialist alongside

Speed at the extreme

PostgreSQL alone: Capable at search, geography and queueing. The fastest at none of them.

A specialist alongside: Faster at its one job, and only at that job.

Backups

PostgreSQL alone: One restore to test, and it's all or nothing.

A specialist alongside: Two restores, which then have to agree with each other.

Hiring

PostgreSQL alone: One skill to hire for, and a common one.

A specialist alongside: A second skill on the team, or a gap the day that person leaves.

The bill

PostgreSQL alone: One machine to size, and everything competes for it.

A specialist alongside: A second service billing whether or not it's busy.

When you find out

PostgreSQL alone: Late, as a query that quietly got slow.

A specialist alongside: Early, as work done before anything needed it.

Keeping search, caching and geography inside PostgreSQL against running a specialist store beside it. Each row states what both choices cost you.

Where it stops

None of this is a reason to avoid it. Knowing where the boundary sits beats discovering it.

It wants your data to have a shape. Not a rigid one, since JSON columns absorb the parts that vary, but if every record genuinely has different fields and the shape changes weekly, you'll spend the project fighting a tool that's trying to help.

It scales in two directions easily and one hard. A bigger machine is a settings change. Read-only copies, so reports don't slow the application, are built in. Splitting writes across many machines needs extra tooling and is a project rather than a setting. Few businesses reach that point.

Analytics is the common mistake. PostgreSQL stores a row at a time, right for looking up one order and wrong for summing one column across a billion. The version that actually bites is smaller: a reporting dashboard on the same database the application uses, slowing checkout every time somebody opens it.

Somebody has to run it, and that's a staffing question

The software costs nothing. You pay for a computer to run it on, and how you buy that computer decides how much of this becomes a job.

Managed hosting is the default now, and for most businesses it should be. Every major cloud sells PostgreSQL and so do a handful of specialists. What you're buying is that patching, backups, failover and upgrades belong to somebody else.

What stays yours either way is the schema, the indexes, and noticing on the morning a query got slow. That isn't a full-time role for most businesses. It's one reachable person, and "the developer who built it" stops being that answer the moment the engagement ends.

Run it yourself and you inherit the rest. Every connection is a separate process on the server, so anything opening a lot of them needs a pooler in front. Old row versions sit there until a background job clears them, invisible until a busy table outpaces it. Neither is exotic, and both want somebody who has met them before.

Ask who that person is before anyone starts building.

Worth knowing before you start

  • Ask whether reporting queries run against the same database the application does. Pointing them at a read-only copy is a small change made early and an awkward one made after a dashboard has started slowing checkout.

  • Ask to see the constraints, not just the tables. A schema that allows an invoice with no customer will eventually hold invoices with no customers, and careful application code doesn't prevent that forever.

  • Ask what the recovery point is: if the database died right now, how many minutes of writes would be gone. Nightly backups alone answer that with "up to a day", which is fine for some businesses and ruinous for others.

  • Ask which major version you'll launch on and when support for it ends. Each gets roughly five years, and moving to the next is a task somebody schedules rather than something that happens overnight.

Common questions

The software is, under a short permissive licence with no seat count and nobody to renegotiate with. The hosting isn't. A managed service charges for the machine, the storage and the backups, and that bill grows with use.

Both are mature, free and open source, and either will carry an ordinary business application without complaint. MySQL has the longer history in cheap shared hosting, is owned by Oracle, and has a community fork called MariaDB. PostgreSQL has been stricter about correctness for longer and does more without extra pieces. If nothing in the project points at one, let the hiring pool decide.

Almost certainly, and volume is rarely what goes wrong first. Tables in the hundreds of millions of rows are ordinary when the indexes are right. What degrades is usually one query nobody looked at, on a table that grew. The better question is how anyone would find that out.

Moving between PostgreSQL hosts is routine. Moving to a different database engine is not. The data exports cleanly, but anything specific to PostgreSQL, its extensions included, gets rewritten. That's true of every database, which is why this choice deserves more thought than the framework above it.

An extension that lets PostgreSQL hold the numeric representations of text that AI search runs on, and find the closest matches to a question. The AI feature then reads from the same database as everything else instead of needing a separate service. Most managed providers support it, and for a first version it's usually enough.

Related

Want to talk through your situation?

A short call is usually enough to tell whether this is the right work for you. If it isn’t, we’ll say so.