Latest Blog Posts

PostgreSQL Roles and Privileges Explained: A Practical RBAC Guide
Posted by Tejaswi Thimmaiah on 2026-10-15 at 18:10

🧪 Build Your PostgreSQL RBAC Lab

Understanding PostgreSQL roles and privileges becomes much easier when you see them in action.

Instead of simply memorizing GRANT and REVOKE commands, we’ll build a small credit-card application environment and explore how PostgreSQL manages users, object ownership, and access permissions.

🎯 What will you learn?

Through this hands-on lab, we’ll explore:

  • 🔐 Roles and Users — Understand LOGIN, NOLOGIN, and why PostgreSQL treats users and groups as roles.
  • 🏦 Object Ownership — Discover how a NOLOGIN role can own databases, schemas, and tables.
  • 🔑 Privileges and Access Control — Learn how database, schema, and table permissions work together.
  • 🔗 Role Membership — Understand INHERIT, SET ROLE, and how privileges flow between roles.
  • 🛡 Least-Privilege Security — Build separate read-only and read-write access for application and reporting users.
  • ⚙ Default Privileges — Automatically configure access for future database objects.
[...]

Hacking Workshop for November 2026
Posted by Robert Haas in Databricks on 2026-10-15 at 17:04
Álvaro Herrera will be joining us in November to discuss, when our monthly hacking workshop will cover Table repacking, done right. If you're interesting in joining us, please sign up using this form and I will send you an invite to one of the sessions.Read more »

A Parade of Horribles, in Serial Order
Posted by Christophe Pettus in pgExperts on 2026-10-15 at 16:00
Sooner or later, someone on the team reads about write skew. It is an unsettling read: two transactions, each correct on its own, each looking at data the other is about to change, both committing, and the database ending up in a state that no ordering of the two could have produced. READ COMMITT… (I consult on PostgreSQL through PGX Inc..)

Moving the pgAdmin Build Farm to GitHub Actions
Posted by Dave Page in pgEdge on 2026-10-15 at 12:55

For most of the last decade, every copy of pgAdmin that anyone has ever downloaded was built by a Jenkins server, and for most of that time it did the job perfectly well. It built the Debian and Red Hat packages, the Windows installer, the macOS app bundle, the Python wheel, the container image, the Helm chart and the documentation; it signed them, published them to the download site, and told me when something had gone wrong. It was also, and there is no polite way to put this, a machine (and a bunch of worker machines) that almost nobody could see, running jobs configured through a web interface whose settings existed nowhere else. A handful of us could log into it and push a release, although in practice I was the one who knew how it was wired together and therefore the one who fixed it when it broke, which is its own kind of single point of failure. If you contributed a change to pgAdmin's packaging, you could not read the thing that would build it, and if I had been hit by the proverbial bus, the recovery plan involved somebody logging into a server and reading XML.We have now moved the whole lot to GitHub Actions, and since this changes things for both users and contributors, it seems worth explaining what has changed and why.

Why move at all

The honest answer is that the build farm had become the least visible part of the project. pgAdmin's source code is reviewed, discussed and version controlled; its build process was none of those things. A Jenkins job is a configuration in a database, and whilst we did eventually keep that configuration in a repository, the repository was a backup rather than the source of truth: the running system was authoritative, and a change made in the interface was live immediately, reviewed by nobody.That matters more than it sounds. The packaging is where a surprising number of user-visible bugs live, because it decides which libraries get bundled, which Python interpreter ships, how the installer is signed, and where the packages land in the repositories that  and  rea[...]

PGConf.Asia 2026: EDB 발표 세션과 PostgreSQL 기술 인사이트
Posted by Floor Drees in EDB on 2026-10-15 at 01:04
2026년 11월 17~18일 홍콩에서 열리는 PGConf.Asia 2026에서 EDB 전문가들이 PostgreSQL의 주요 기술과 운영 과제를 소개합니다. AI 기반 SQL 생성과 검색·RAG부터 스케일아웃 아키텍처, 성능 튜닝, CloudNativePG 및 TPA 기반 클러스터 관리까지 주요 발표 세션을 미리 살펴보세요.

All Your GUCs in a Row: primary_conninfo
Posted by Christophe Pettus in pgExperts on 2026-10-15 at 01:00
`primary_conninfo` tells a standby where to stream WAL from—but only after the archive and pg_wal run dry. (I consult on PostgreSQL through PGX Inc..)

bigquery_fdw works again on every distribution we ship in the RPM repo
Posted by Devrim GÜNDÜZ in EDB on 2026-10-14 at 22:35
I packaged bigquery_fdw over 6 years ago. However if you tried to use bigquery_fdw from the PostgreSQL YUM or zypper repositories recently, there is a good chance it did not work: the Python modules it needs could not be imported by the interpreter it runs in. The packages that are in the repositories as of today fix that on RHEL 8, 9 and 10, Fedora 43, 44 and 45, Amazon Linux 2023, and SLES 15 and 16. This post explains what was wrong, what changed, and what (if anything) you need to do.

The full history is in issue #367.

Continue reading "bigquery_fdw works again on every distribution we ship in the RPM repo"

All Your GUCs in a Row: post_auth_delay and pre_auth_delay
Posted by Christophe Pettus in pgExperts on 2026-10-14 at 01:00
Debugging PostgreSQL connections requires stopping a backend before it does anything interesting. (I consult on PostgreSQL through PGX Inc..)

PostgreSQL 19: part 5.1 (QPT) or CommitFest 2026-03
Posted by Pavel Luzanov in Postgres Professional on 2026-10-14 at 00:00

We’re wrapping up our series of articles reviewing the changes in PostgreSQL 19. The previous articles covered the first four CommitFests: 2025-07, 2025-09, 2025-11, 2026-01.

Today we begin our review of the March 2026 CommitFest. Why «begin»? As in previous years, the March review is going to be a long one: the final CommitFest of the cycle is where many of the most important changes land. Such a review is hard not only to write but also to read all the way through 🙂. That’s why this time it’s split into four articles.

The first article covers everything related to query optimization, in other words, the topics of our QPT training course. The second will focus on changes more relevant to the DBA1 and DBA2 courses. The third will cover DBA3 and DBS. The fourth will look at new SQL features, as well as changes related to the DEV1 and DEV2 courses.

RevertFest

But first, let’s look at what won’t make it into version 19. An impressive number of features were committed to version 19 before the feature freeze, only to be reverted before the release:

At the time of writing, not all open items have been resolved, and the release is tentatively scheduled for October 29. So the list of new features may shrink further.

CommitFest

With that caveat in mind, let’s move on to the changes related to query optimization. Here’s what’s covered:

  • Query plan stabilization and plan advice
  • auto_explain: logging EXPLAIN options added by extensions
  • EXPLAIN (analyze, timing): reducing timing overhead
[...]

PGConf.EU 2026: Into the PostgreSQL Multiverse
Posted by Mayur B. on 2026-10-13 at 20:08

Somewhere in the multiverse, there is a version of you who attends every interesting talk at PGConf.EU.

Unfortunately, in this universe, PostgreSQL has parallel query execution. Humans don’t.

Last year, I created an Underground Map for Database Nerds to navigate PGConf.EU without getting lost in the schedule.

This year, the conference returns to Valencia, October 20–23, with five parallel tracks and the same old problem: too many good talks occupying the same space-time coordinates.

So, I’ve borrowed a little inspiration from the Marvel Multiverse.

Imagine three alternate versions of yourself attending the same PostgreSQL conference, each with completely different priorities.

🌍 Universe Earth-5432: The PostgreSQL User

Superpower: EXPLAIN ANALYZE

DBAs, DBREs, developers, architects and anyone whose applications depend on PostgreSQL.

You’re interested in what PostgreSQL can do, how it works, how to make it faster, and why it occasionally ruins your weekend.

📣 Universe Earth-1996: The PostgreSQL Advocate

Superpower: Converting Oracle users without any violence.

Community organisers, speakers, educators, contributors, evangelists and anyone spreading the PostgreSQL gospel.

You care about adoption, community growth, open source, innovation and making PostgreSQL everyone’s favourite elephant.

💼 Universe Earth-2013: The Decision Maker

Superpower: GRANT BUDGET

CTOs, CIOs, engineering directors, team leads and architects who decide what the company runs, buys, builds or migrates.

You care about risk, reliability, architecture, operational costs and answering the eternal question: “Why not just use the cloud?”

You may inhabit more than one universe. That’s perfectly legal. Unlike PostgreSQL superuser privi

[...]

Zero-downtime Postgres upgrades with logical replication
Posted by Dimitri Fontaine on 2026-10-13 at 12:14

This is part 3 of a series about Postgres logical replication use-cases, and about how the feature set has evolved over the past ten years and ten releases (Postgres 10 through the Postgres 19 beta), one architecture at a time. Part 1 built a hub-and-workers system for write scalability and has the table of what each release added, which this post assumes. Part 2 consolidated several application databases into one warehouse. This one is the most common reason to touch logical replication at all: a major-version upgrade with no downtime, and a way back if it goes wrong.

Making COUNTs and the Rest of Search Really Fast (Part II)
Posted by Ming Ying in ParadeDB on 2026-10-13 at 12:00
How ctid-aware segment partitioning, an inverted DocId map, and bitmap postings accelerated ParadeDB's Wikipedia COUNT queries—then a look at the rest of search, where ParadeDB delivered 10–22x TIN's throughput on filtered and time-sorted Hacker News queries.

Conference Preview: EDB at PGConf.Asia 2026
Posted by Floor Drees in EDB on 2026-10-13 at 08:36

PGConf Asia 2026 is heading to Hong Kong from November 17–18! As a premier regional event for the PostgreSQL community, PGConf.Asia brings together developers, contributors, DBAs, and enterprise users from across the continent. Several EDB team members will be presenting sessions this year. Additionally, EDB's own Bruce Momjian is serving on the organizing committee and co-chairing the program committee. Here is a sneak peek at the EDB-led sessions at PGConf Asia:

Strategic insights

What's Missing in Postgres? - Bruce Momjian (Keynote)

While Postgres introduces roughly 200 features and

Conference Preview: EDB at PGConf.Asia 2026
Posted by Floor Drees in EDB on 2026-10-13 at 08:36

PGConf Asia 2026 is heading to Hong Kong from November 17–18! As a premier regional event for the PostgreSQL community, PGConf.Asia brings together developers, contributors, DBAs, and enterprise users from across the continent. Several EDB team members will be presenting sessions this year. Additionally, EDB's own Bruce Momjian is serving on the organizing committee and co-chairing the program committee. Here is a sneak peek at the EDB-led sessions at PGConf Asia:

Strategic insights

What's Missing in Postgres? - Bruce Momjian (Keynote)

While Postgres introduces roughly 200 features and

CUDA and PostgreSQL: Twins from two Worlds
Posted by Abhisek Goswami in Cybertec on 2026-10-13 at 03:00

Do you know about the Winklevoss twins, Cameron and Tyler? They grew up together, went to the same university, and eventually built very different things around technology, finance, and entrepreneurship. Whatever you think of their story, there is something fascinating about twins who start from the same place and then take their abilities into different directions.

Now imagine two twins who grow up in completely different families.

One becomes obsessed with organizing information, while the other becomes obsessed with doing enormous amounts of work at the same time.

They spend years in completely different worlds. Then one day, they meet. And someone says:

“You two might actually work really well together.”

That is the story I want to tell about PostgreSQL and CUDA.

They are not really twins, of course. They were born almost a decade apart, built for different purposes, and live at very different levels of the computing stack.

But there is an uncanny similarity in one of the ideas behind them. 

Let me explain.

Two births, roughly a decade apart

PostgreSQL's story goes back to the POSTGRES project at the University of California, Berkeley. In 1996, the project moved from the name Postgres95 to PostgreSQL, starting with version 6.0.

Then, roughly ten years later, another important piece of the computing world arrived.

In 2006, NVIDIA introduced CUDA, giving developers a programming model for using GPUs for general-purpose computation.

Two technologies with very different beginnings. Relational databases like PostgreSQL have been dealing with something, humans have been struggling with forever:

How do you keep information organized and reliable when lots of people are using it at the same time?

CUDA came from a very different question:

What if we could use the enormous number of computing resources inside a GPU for things other than drawing pixels?

Different questions with different answers.

But there is a common idea hiding underneath both.

[...]

All Your GUCs in a Row: port
Posted by Christophe Pettus in pgExperts on 2026-10-13 at 01:00
The `port` parameter does double duty: it names the TCP socket and the Unix socket file too. (I consult on PostgreSQL through PGX Inc..)

Who bypasses row-level security in PostgreSQL? Measured
Posted by Chris van Eijk on 2026-10-13 at 00:00
BYPASSRLS, table owners, FORCE and superusers in PostgreSQL 17, measured: who sees every row, what role membership passes on, and what RLS never covers.

Explain Analyze is a sample-size of One: Your query ran 1,100x faster the second time. It wasn't the cache.
Posted by Alexander Ioffe on 2026-10-13 at 00:00
The same LIMIT query on an idle Postgres: 78 ms, then 0.07 ms, with every page already in shared_buffers. Ten runs with a standard deviation and a per-run sample on each plan node found the cause (synchronize_seqscans), a control proved it, and the same statement returned different rows with nothing writing. Why one EXPLAIN ANALYZE is a sample of one, and how to read dispersion on a plan.

permission denied for table in PostgreSQL: which grant?
Posted by Chris van Eijk on 2026-10-13 at 00:00
What raised 'permission denied for table', schema and sequence in PostgreSQL 17, measured: the privilege each statement needs, and why default privileges miss.

current_setting and set_config in PostgreSQL, measured
Posted by Chris van Eijk on 2026-10-13 at 00:00
What current_setting and set_config do with a custom setting in PostgreSQL 17, measured: NULL or empty string, how long a value lasts, defaults, who may set it.

ALTER DEFAULT PRIVILEGES not working? What we measured
Posted by Chris van Eijk on 2026-10-13 at 00:00
ALTER DEFAULT PRIVILEGES in PostgreSQL 17, measured: whose new tables it covers, why a per-schema revoke does nothing, what counts as a table, how to list it.

What deleting rows does to a PostgreSQL table
Posted by Hollis Varden on 2026-10-13 at 00:00

A table that shrinks in rows does not shrink on disk. Everyone who has run PostgreSQL for a while knows this in general. I wanted the actual numbers, because "VACUUM reclaims space" means something narrower than it sounds.

Short answer: I deleted every second row of a 2,000,000-row table. The table was 137 MB before, 137 MB after the DELETE, 137 MB after VACUUM, and 68 MB after VACUUM FULL.

Setup

PostgreSQL 18.6, default settings, autovacuum on. 2020 13-inch MacBook Pro, Intel i5-8257U, 8 GB RAM. Sizes are pg_table_size. Times are wall clock for the statement, median of three runs, each on a freshly built table.

Deleting half the rows

step table size
2M rows, after VACUUM ANALYZE 137 MB
after DELETE FROM b1 WHERE id % 2 = 0 137 MB
after VACUUM b1 137 MB
after VACUUM FULL b1 68 MB

The DELETE marks rows dead. VACUUM makes their space reusable, so the next million inserts will fill those gaps instead of growing the file. It does not hand the space back to the operating system, with one exception: empty pages at the very end of the file get cut off. I deleted every second row, so every page kept half its rows and nothing at the end was empty.

VACUUM FULL writes a new copy of the table and drops the old one. That is why it gets the space back, and also why it takes a lock that blocks reads and writes while it runs.

DELETE or TRUNCATE to empty a table

time WAL written
DELETE FROM d1 (1M rows) 3.5 s 125 MB
[...]

Four PostgreSQL arguments that came out even
Posted by Hollis Varden on 2026-10-13 at 00:00

Some advice gets repeated in code review because it sounds like it should matter. I picked four I have seen argued about and measured them. I expected at least two clear winners. I got three ties and one result that went the opposite way from the advice.

Setup

PostgreSQL 18.6, default settings. 2020 13-inch MacBook Pro, Intel i5-8257U, 8 GB RAM. A 2,000,000-row table u with an id, an email, a status and a timestamp. Times are execution times from EXPLAIN (ANALYZE, TIMING OFF), warm cache, first run discarded, median of the rest.

IN, ANY or a VALUES join for 1,000 ids

median runs buffers
id IN (1999, 3998, ...) 26 ms 15 to 54 ms 3,001
id = ANY('{...}'::bigint[]) 19 ms 15 to 20 ms 3,001
JOIN (VALUES ...) v(i) ON id = i 20 ms 16 to 21 ms 3,001

All three read exactly the same pages. The medians differ, but one IN run took 54 ms and another 15 ms, so I would not read anything into the gap. Use whichever form your driver makes easy. ANY has one practical advantage when the array is passed as a single parameter: the statement text stays the same whatever the number of ids, which is kinder to prepared statements and to pg_stat_statements.

text, smallint or enum for a status column

Three values, two million rows, each stored three ways in its own one-column table.

table index
text 72.6 MB 13.9 MB
[...]

Why is my Whale Query 1000x Slower in Prod? Databases hate skew, each hates it differently
Posted by Alexander Ioffe on 2026-10-13 at 00:00
Ten enterprise customers own 80% of the orders. On uniform test data the query runs in ~1ms; on that real skew it runs ~1,000x slower. The fix doesn't transfer between engines: Postgres is rescued by one free session setting, SQL Server can't be touched by it and needs a completely different access-path fix. Measured on Neon and Azure SQL Database using ExoBench.

PostgreSQL row-level security for SaaS: what we measured
Posted by Chris van Eijk on 2026-10-12 at 23:15
Row-level security for a multi-tenant SaaS on PostgreSQL 17, result by result: what leaks, what it costs, how to set the tenant, and where each test is.

Go, pgx and PostgreSQL row-level security, measured
Posted by Chris van Eijk on 2026-10-12 at 23:15
Setting the tenant for PostgreSQL row-level security in Go with pgx 5.11, measured: pgxpool, PrepareConn hooks, transactions, batches and PgBouncer.

The Patch Is Coming From Inside the House
Posted by Christophe Pettus in pgExperts on 2026-10-12 at 16:00
On August 25, Robert Haas opened a pgsql-hackers thread like this: I asked Claude to evaluate which v19 patches were the scariest based on the number and type of bugs fixed post-freeze. Results below, with a few particularly cutting remarks from the LLM edited out. The subject line was “scary p… (I consult on PostgreSQL through PGX Inc..)

PostgreSQL RPM repository meets AI with pg_statviz
Posted by Devrim GÜNDÜZ in EDB on 2026-10-12 at 06:40
pg_statviz can now ask Claude, a local Ollama model, OpenAI or Gemini to explain your PostgreSQL statistics on every distro we ship it for. Getting there took three days and a few dozen new Python packages :-)

pg_statviz is a small tool that snapshots PostgreSQL's internal statistics and draws charts from them. Its newer releases also hand those numbers to an LLM and ask for an analysis. On Fedora this just worked, because Fedora ships fresh AI SDKs. On everything else, it did not -- until last weekend!
Continue reading "PostgreSQL RPM repository meets AI with pg_statviz"

PostgreSQL RPM repository meets AI with pg_statviz
Posted by Devrim GÜNDÜZ in EDB on 2026-10-12 at 06:40
pg_statviz can now ask Claude, a local Ollama model, OpenAI or Gemini to explain your PostgreSQL statistics on every distro we ship it for. Getting there took three days and a few dozen new Python packages :-)

pg_statviz is a small tool that snapshots PostgreSQL's internal statistics and draws charts from them. Its newer releases also hand those numbers to an LLM and ask for an analysis. On Fedora this just worked, because Fedora ships fresh AI SDKs. On everything else, it did not -- until last weekend!
Continue reading "PostgreSQL RPM repository meets AI with pg_statviz"

Contributions for week 40
Posted by Cornelia Biacsics in postgres-contrib.org on 2026-10-12 at 06:27

On 7 October, the London PostgreSQL Meetup group met.

Organizers:

  • Valeria Kaplan
  • Chris Ellis
  • Alastair Turner

Speakers:

  • Elizabeth Christensen
  • Alex Kasko
  • Jimmy Angelakos

On 8 October the PostgreSQL England North Meetup Group. Joseph Bharath Reddy Allam delivered a talk.

Organized by:

  • Daniel Chapman
  • Stephen Wood
  • Kate Gawron
  • Peter Schofield

On 8 October, the Greece PostgreSQL Users Group Meetup met. Avinash Vallarapu and Florents Tselai delivered a talk.

Organizers:

  • Florents Tselai
  • Eftychia Kitsou
  • Charis Charalampidi
  • Kostas Maistrelis

On 8 October, the Illinois Prairie PostgreSQL User Group met, organized by Henrietta Dombrovskaya and Carlos Aranibar. Devrim Gündüz delivered a talk.

On 9 October, PgPune took place.

Organized by

  • Ashish Kumar Mehra
  • Sachin D. Kotwal
  • Sagar Jadhav
  • Rushabh Lathia

Speakers:

  • Abhishek Oberoi
  • Anuj Sharma
  • Ashutosh Sharma
  • Debendra Saha
  • Deepak Mahato
  • Hari Kiran
  • Mukund Maheshwari
  • Nadeem Khan
  • Pushkar Khadilkar
  • Sneha Gohil
  • Tom Kincaid
  • Vishal Sawale

Top posters

Number of posts in the past two months

Top teams

Number of posts in the past two months

Feeds

Planet

  • Policy for being listed on Planet PostgreSQL.
  • Add your blog to Planet PostgreSQL.
  • List of all subscribed blogs.
  • Manage your registration.

Contact

Get in touch with the Planet PostgreSQL administrators at planet at postgresql.org.