41554 blogs · [ { "id": "01a0e542-4005-73f6-88a4-4fb609d4b869", "title": "What REPACK (CONCURRENTLY) costs while it runs", "url": "https://boringsql.com/posts/repack-concurrently-costs/", "published_at": "2026-09-28T01:30:00+00:00" }, { "id": "01a0d75d-ad7e-7383-8800-8a33d545ccd2", "title": "Where PostgreSQL stores row locks", "url": "https://boringsql.com/posts/row-locks-on-the-page/", "published_at": "2026-09-17T06:40:00+00:00" }, { "id": "01a094dd-5bc3-704f-81ce-dbd2095df364", "title": "The unbearable lightness of one more index", "url": "https://boringsql.com/posts/unbearable-lightness-of-one-more-index/", "published_at": "2026-09-11T10:00:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e096ceae8", "title": "Read your own writes, off the primary", "url": "https://boringsql.com/posts/read-your-own-writes/", "published_at": "2026-08-31T23:36:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e09a67a74", "title": "The curious case of Google's AlloyDB", "url": "https://boringsql.com/posts/google-alloydb/", "published_at": "2026-08-15T17:30:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0a424f1a", "title": "The DISTINCT in your COUNT", "url": "https://boringsql.com/posts/distinct-in-your-count/", "published_at": "2026-08-05T22:50:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0a73ad3d", "title": "PostgreSQL's MVCC is bad. So is everyone else's.", "url": "https://boringsql.com/posts/mvcc-bad-bad/", "published_at": "2026-07-27T16:01:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0b3859c8", "title": "The tests passed. The plan didn't.", "url": "https://boringsql.com/posts/regresql20/", "published_at": "2026-07-12T20:15:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0b525581", "title": "VACUUM at the Page Level", "url": "https://boringsql.com/posts/vacuum-at-the-page-level/", "published_at": "2026-07-05T17:13:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0c4698fe", "title": "Same rows, different SUM", "url": "https://boringsql.com/posts/same-rows-different-sum/", "published_at": "2026-06-28T21:25:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0d042a79", "title": "The NULL in your NOT IN", "url": "https://boringsql.com/posts/not-in-null/", "published_at": "2026-06-14T23:30:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0db27fa8", "title": "pg_stat_statements: everything it can't", "url": "https://boringsql.com/posts/pg-stat-statements-part-2/", "published_at": "2026-06-03T08:35:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0e6aa1c6", "title": "pg_stat_statements: everything it tells you", "url": "https://boringsql.com/posts/pg-stat-statements/", "published_at": "2026-06-02T22:00:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0e84358d", "title": "TOAST: Where PostgreSQL hides big values", "url": "https://boringsql.com/posts/postgresql-toast/", "published_at": "2026-05-24T15:10:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0e98adfb", "title": "Welcome to ORDER BY jungle", "url": "https://boringsql.com/posts/order-by-jungle/", "published_at": "2026-05-15T09:43:00+00:00" }, { "id": "01a08757-af51-705b-abd8-d22e0edb339a", "title": "Strong views on PostgreSQL VIEWs", "url": "https://boringsql.com/posts/strong-views/", "published_at": "2026-05-10T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9c8dc6b54", "title": "HOT Updates in Postgres", "url": "https://boringsql.com/posts/hot-updates/", "published_at": "2026-04-28T20:23:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9c972c460", "title": "PostgreSQL MVCC, Byte by Byte", "url": "https://boringsql.com/posts/postgresql-mvcc-byte-by-byte/", "published_at": "2026-04-17T14:45:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9c9d26a4c", "title": "Don't let AI touch your production database", "url": "https://boringsql.com/posts/dont-let-ai-to-prod/", "published_at": "2026-04-06T20:24:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9ca684149", "title": "Good CTE, bad CTE", "url": "https://boringsql.com/posts/good-cte-bad-cte/", "published_at": "2026-03-29T12:47:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9caa31d28", "title": "pg_regresql: truly portable PostgreSQL statistics", "url": "https://boringsql.com/posts/regresql-extension/", "published_at": "2026-03-21T14:32:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cabe09e6", "title": "Production query plans without production data", "url": "https://boringsql.com/posts/portable-stats/", "published_at": "2026-03-08T22:05:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cb94d528", "title": "PostgreSQL Statistics: Why queries run slow", "url": "https://boringsql.com/posts/postgresql-statistics/", "published_at": "2026-02-26T23:35:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cc753aaa", "title": "Inside PostgreSQL's 8KB Page", "url": "https://boringsql.com/posts/inside-the-8kb-page/", "published_at": "2026-02-19T21:52:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9ccf12f18", "title": "Reading Buffer statistics in EXPLAIN output", "url": "https://boringsql.com/posts/explain-buffers/", "published_at": "2026-02-06T15:52:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cd14ce7e", "title": "Introduction to Buffers in PostgreSQL", "url": "https://boringsql.com/posts/introduction-to-buffers/", "published_at": "2026-01-24T16:57:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cd1da71c", "title": "The hidden cost of PostgreSQL arrays", "url": "https://boringsql.com/posts/good-bad-arrays/", "published_at": "2026-01-12T20:50:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cda406ad", "title": "Instant database clones with PostgreSQL 18", "url": "https://boringsql.com/posts/instant-database-clones/", "published_at": "2025-12-22T23:53:16+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cddcb88e", "title": "VACUUM Is a Lie (About Your Indexes)", "url": "https://boringsql.com/posts/vacuum-is-lie/", "published_at": "2025-12-11T23:34:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9ce5a9450", "title": "RegreSQL: Regression Testing for PostgreSQL Queries", "url": "https://boringsql.com/posts/regresql-testing-queries/", "published_at": "2025-11-13T22:47:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cea3db65", "title": "Beyond Start and End: PostgreSQL Range Types", "url": "https://boringsql.com/posts/beyond-start-end-columns/", "published_at": "2025-11-02T21:40:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cf34af4c", "title": "PostgreSQL maintenance without superuser", "url": "https://boringsql.com/posts/postgresql-predefined-roles/", "published_at": "2025-09-13T20:55:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9cf758e46", "title": "Beyond the Basics of Logical Replication", "url": "https://boringsql.com/posts/logical-replication-beyond-the-basics/", "published_at": "2025-06-24T07:10:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d05f48ef", "title": "First steps with Logical Replication in PostgreSQL", "url": "https://boringsql.com/posts/logication-replication-introduction/", "published_at": "2025-06-11T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d1098e23", "title": "PostgreSQL Service Connections", "url": "https://boringsql.com/posts/postgresql-service-definition/", "published_at": "2025-05-15T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d1bfd6ea", "title": "Time to Better Know The Time in PostgreSQL", "url": "https://boringsql.com/posts/know-the-time-in-postgresql/", "published_at": "2025-04-06T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d1dd400b", "title": "VIEW inlining in PostgreSQL", "url": "https://boringsql.com/posts/view-inlining/", "published_at": "2025-02-08T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d2098cd6", "title": "DELETEs are difficult", "url": "https://boringsql.com/posts/deletes-are-difficult/", "published_at": "2024-11-23T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d23ff0bb", "title": "Text identifiers in PostgreSQL database design", "url": "https://boringsql.com/posts/text-identifier-in-db-design/", "published_at": "2024-11-09T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d28386b3", "title": "We need to talk about ENUMs", "url": "https://boringsql.com/posts/postgresql-enums/", "published_at": "2024-09-04T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d338bcc8", "title": "Beyond Simple Upserts with MERGE in PostgreSQL", "url": "https://boringsql.com/posts/beyond-upserts-with-merge/", "published_at": "2024-08-25T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d401a154", "title": "Gentle Introduction to Window Functions in PostgreSQL", "url": "https://boringsql.com/posts/window-functions-introduction/", "published_at": "2024-07-07T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d42fd469", "title": "The time keepers: pg_cron and pg_timetable", "url": "https://boringsql.com/posts/time-keepers-pg-cron-pg-timetable/", "published_at": "2024-06-15T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d4e61e79", "title": "Deep Dive into PostgREST - Time Off Manager (Part 3)", "url": "https://boringsql.com/posts/postgrest-tutorial-part3/", "published_at": "2024-06-06T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d53bc999", "title": "Custom PostgreSQL extensions with Rust", "url": "https://boringsql.com/posts/custom-postgresql-extensions-with-rust/", "published_at": "2024-05-24T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d5b8f049", "title": "Deep Dive into PostgREST - Time Off Manager (Part 2)", "url": "https://boringsql.com/posts/postgrest-tutorial-part2/", "published_at": "2024-05-18T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d68c9000", "title": "Deep Dive into PostgREST - Time Off Manager (Part 1)", "url": "https://boringsql.com/posts/postgrest-tutorial-part1/", "published_at": "2024-05-11T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d6ae5fe2", "title": "How not to change PostgreSQL column type", "url": "https://boringsql.com/posts/how-not-to-change-postgresql-column-type/", "published_at": "2024-05-04T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d6b40f3f", "title": "The Bloat Busters: pg_repack vs pg_squeeze", "url": "https://boringsql.com/posts/the-bloat-busters-pg-repack-pg-squeeze/", "published_at": "2024-04-27T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d6d66d2d", "title": "Are SQL & Databases Boring? Absolutely - and That's a Good Thing!", "url": "https://boringsql.com/posts/boring-sql-and-databases/", "published_at": "2024-04-21T00:00:00+00:00" }, { "id": "01a08757-af52-7062-9ce0-75e9d744937b", "title": "When and Why PostgreSQL Indexes Are Ignored", "url": "https://boringsql.com/posts/why-postgresql-indexes-are-ignored/", "published_at": "2024-04-14T00:00:00+00:00" } ] posts Claim your blog
Back to boringSQL | Supercharge your SQL & PostgreSQL powers
Blog · corpus.blog/blogs/boringsql.com/posts

boringSQL | Supercharge your SQL & PostgreSQL powers

boringsql.com

2026

2025

2024