{"id":13846410,"url":"https://github.com/maahl/awesome-postgres-resources","last_synced_at":"2025-07-12T07:32:37.734Z","repository":{"id":150280868,"uuid":"72806771","full_name":"maahl/awesome-postgres-resources","owner":"maahl","description":"A curated list of awesome PostgreSQL resources to understand PostgreSQL","archived":false,"fork":false,"pushed_at":"2019-03-14T10:59:36.000Z","size":11,"stargazers_count":20,"open_issues_count":0,"forks_count":4,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-11-07T14:02:17.144Z","etag":null,"topics":["postgresql","postgresql-internals"],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/maahl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2016-11-04T02:28:15.000Z","updated_at":"2024-03-03T23:21:10.000Z","dependencies_parsed_at":"2023-05-09T13:03:07.538Z","dependency_job_id":null,"html_url":"https://github.com/maahl/awesome-postgres-resources","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maahl%2Fawesome-postgres-resources","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maahl%2Fawesome-postgres-resources/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maahl%2Fawesome-postgres-resources/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/maahl%2Fawesome-postgres-resources/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/maahl","download_url":"https://codeload.github.com/maahl/awesome-postgres-resources/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225807265,"owners_count":17527222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["postgresql","postgresql-internals"],"created_at":"2024-08-04T18:00:33.109Z","updated_at":"2024-11-21T21:30:26.607Z","avatar_url":"https://github.com/maahl.png","language":null,"funding_links":[],"categories":["Lists that I found so far:","Other Lists"],"sub_categories":["TeX Lists"],"readme":"# Awesome PostgreSQL resources\nA curated list of awesome resources to understand PostgreSQL. Inspired by [awesome-postgres](https://github.com/dhamaniasad/awesome-postgres)\n\nThis is a WIP, contributions are welcome!\n\n## Contents\n\n* [Administration](#administration)\n* [Hacking postgres](#hacking_postgres)\n* [Internals](#internals)\n* [SQL](#sql)\n\n## Administration\n\n* [Autovacuum, explained for engineers](http://blog.postgresql-consulting.com/2015/10/autovacuum-explained-for-engineers-new.html)  \n  A presentation describing autovacuum.  \n  Ilya Kosmodemiansky, 2015\n\n* [Common misconceptions about locking in PostgreSQL](https://www.compose.com/articles/common-misconceptions-about-locking-in-postgresql/)  \n  A blog post clarifying locks in PostgreSQL.  \n  Robert Wysocki, 2015\n\n* [It's a view, it's a table... no, it's a materialized view!](https://www.compose.com/articles/its-a-view-its-a-table-no-its-a-materialized-view/)  \n  A fairly complete introduction to materialized views.  \n  Robert Wysocki, 2015\n\n* [Postgres autovacuum is not the enemy](https://www.citusdata.com/blog/2016/11/04/autovacuum-not-the-enemy/)  \n  A blog post explaining the rationale behind autovacuum.  \n  Joe Nelson, 2016\n\n* [PostgreSQL monitoring cheatsheet](https://russ.garrett.co.uk/2015/10/02/postgres-monitoring-cheatsheet/)  \n  A blog post listing some useful metrics when monitoring PostgreSQL.  \n  Russ Garett, 2015\n\n* [PostgreSQL primary key type analysis](http://gosimple.me/postgresql-primary-key-type-analysis/)  \n  A blog post comparing the performance of primary keys using integer sequences\n  and various UUID generation methods.  \n  Adam Brusselback, 2016\n\n## Hacking postgres\n\n* [Hacking PostgreSQL](https://www.postgresql.eu/events/pgconfeu2018/sessions/session/2058/slides/96/hackingpg-present.pdf)  \n  A conference presentation that gives an overview of PostgreSQL's source code,\n  some important structures, and other useful info to get started in hacking\n  postgres.  \n  Stephen Frost, 2018\n\n* [Introduction to MemoryContexts](http://blog.pgaddict.com/posts/introduction-to-memory-contexts)  \n  [AllocationSet internals](http://blog.pgaddict.com/posts/allocation-set-internals)  \n  [Examples of palloc overhead](http://blog.pgaddict.com/posts/palloc-overhead-examples)  \n  [How much benefit do we get from Allocation set?](http://blog.pgaddict.com/posts/how-much-benefit-do-we-get-from-allocation-set)  \n  A series of blog posts explaining the rationale behind `palloc` (postgres'\n  replacement of `malloc`), how to use it and its consequences on\n  performance.  \n  Tomas Vondra, 2014\n\n* [Postgresql hooks documentation](https://github.com/AmatanHead/psql-hooks)  \n  A github repository documenting all function hooks in PostgreSQL  \n  Begishev Nikita and Goncharov Vladimir, 2018\n\n* [Review of Patch Reviewing](https://www.postgresql.eu/events/pgconfeu2018/sessions/session/2066/slides/95/patch_review-present.pdf)  \n  An explanation of how to review a patch in postgres  \n  Stephen Frost, 2018\n\n* [Serverside Programming in C](http://hlinnaka.iki.fi/presentations/PGConf.eu-Serverside-Programming-in-C.pdf)  \n  A good intro to get started in hacking postgres, including memory management,\n  string handling, error reporting, useful structures, etc.  \n  Heikki Linnakangas, 2018\n\n* [Writing Postgres extensions - the basics](http://big-elephants.com/2015-10/writing-postgres-extensions-part-i/)  \n  [Writing Postgres extensions - types and operators](http://big-elephants.com/2015-10/writing-postgres-extensions-part-ii/)  \n  [Writing Postgres extensions - debugging](http://big-elephants.com/2015-10/writing-postgres-extensions-part-iii/)  \n  [Writing Postgres extensions - testing](http://big-elephants.com/2015-11/writing-postgres-extensions-part-iv/)  \n  [Writing Postgres extensions - code organization and versioning](http://big-elephants.com/2015-11/writing-postgres-extensions-part-v/)  \n  A series of blog posts that explain in details how to code your own extensions  \n  Manuel Kniep and adjust GmbH, 2015\n\n## Internals\n\n* [Access path selection in a relational database management system](https://s3.amazonaws.com/academia.edu.documents/12453180/selinger-etal-1979.pdf?AWSAccessKeyId=AKIAIWOWYYGZ2Y53UL3A\u0026Expires=1524048486\u0026Signature=2e%2Fpd9Wk57zalZ7lwQAixWYl%2FPg%3D\u0026response-content-disposition=inline%3B%20filename%3DAccess_path_selection_in_a_relational_da.pdf)  \n  The original article describing the query optimizer dynamic algorithm for join\n  order selection, originally implemented in System R but still used in many\n  DBMSs, including PostgreSQL.  \n  Patricia Selinger et al., 1976\n\n* [All you need to know about sorting in Postgres](https://madusudanan.com/blog/all-you-need-to-know-about-sorting-in-postgres/)  \n  An overview of the sorting algorithms used in PostgreSQL and how PostgreSQL\n  chooses which one to use.  \n  Madusudanan.B.N, 2016\n\n* [A look at how postgres executes a join](http://patshaughnessy.net/2015/11/24/a-look-at-how-postgres-executes-a-tiny-join)  \n  A detailed description of join execution.  \n  Pat Shaughnessy, 2015\n\n* [Backend flowchart](https://www.postgresql.org/developer/backend/)  \n  A chart describing the role of each component in the backend. Don't forget to\n  also check the [full\n  index](https://wiki.postgresql.org/wiki/Backend_flowchart) that is\n  associated to it.  \n  PostgreSQL, 2012\n\n* [Buffer manager](http://www.interdb.jp/pg/pgsql08.html)  \n  A detailed description of the cache handling in PostgreSQL.  \n  Hironobu Suzuki, 2016\n\n* [Explaining `CREATE INDEX CONCURRENTLY`](http://blog.2ndquadrant.com/create-index-concurrently/)  \n  A blog post explaining in great detail how PostgreSQL builds an index without\n  locking the table from updates.  \n  Pavan Deolasee, 2017\n\n* [Explaining the query optimizer](http://momjian.us/main/writings/pgsql/optimizer.pdf)  \n  A presentation introducing the query planner.  \n  Bruce Momjian, 2016\n\n* [Explicit locking](https://www.postgresql.org/docs/current/static/explicit-locking.html)  \n  The section in PostgreSQL docs that explains the various locks available and\n  how they interact with each other.  \n  PostgreSQL, current\n\n* [HOT](https://git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/access/heap/README.HOT;hb=HEAD)  \n  The readme in the PostgreSQL source code that describes in great details how\n  Heap-Only Tuples (HOT) work.  \n  PostgreSQL, 2012\n\n* [Index internals](https://www.pgcon.org/2016/schedule/attachments/434_Index-internals-PGCon2016.pdf)  \n  A presentation ([video\n  available](https://www.youtube.com/watch?v=W6B8-srOsrs)) that describes how\n  the different indexes in PostgreSQL store data.  \n  Heikki Linnakangas, 2016\n\n* [PostgreSQL internals through pictures](https://momjian.us/main/writings/pgsql/internalpics.pdf)  \n  A presentation doing a broad overview of PostgreSQL internals.  \n  Bruce Momjian, 2016\n\n* [PostgreSQL query optimization](http://jinchengli.me/post/postgres-query-opt/)  \n  A blog post introducing query evaluation plans and the algorithm to generate\n  them.  \n  Jincheng Li, 2016\n\n* [Query execution techniques in PostgreSQL](http://www.neilconway.org/talks/executor.pdf)  \n  A presentation that describes how plan nodes are executed.  \n  Neil Conway, 2007\n\n## SQL\n\n* [Explanation of jsonb introduced by PostgreSQL](http://stackoverflow.com/a/22910602/2451259)  \n  A stackoverflow answer that explains concisely the differences between hstore,\n  json and jsonb formats.  \n  pozs, 2014\n\n* [PostgreSQL cheat sheet: string functions](http://postgresql-backup.com/postgresql-blog/wp-content/uploads/2016/06/PostgreSQL-Cheat-Sheet_-String-Functions.pdf)  \n  A cheat sheet for string operations in PostgreSQL.  \n  PostgreSQL Backup, 2016\n\n* [Postgres window magic](http://momjian.us/main/writings/pgsql/window.pdf)  \n  A presentation detailing the possibilities of window functions.  \n  Bruce Momjian, 2017\n\n* [SQL joins visualizer](http://sql-joins.leopard.in.ua/)  \n  Describe the data you want to get from a join using Venn diagrams, and the\n  corresponding SQL join is generated.  \n  Alexey Vasiliev, 2016\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaahl%2Fawesome-postgres-resources","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmaahl%2Fawesome-postgres-resources","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmaahl%2Fawesome-postgres-resources/lists"}