logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git
commit: cbe40157c1ab1d9a4e968bea68d263483f73255d
parent 7a6c7f87516ddced6d91d972d203fdee45f3f7b7
Author: Drew DeVault <sir@cmpwn.com>
Date:   Thu,  5 Aug 2021 17:24:29 +0200

Prase for PostgreSQL

Diffstat:

Acontent/blog/In-praise-of-Postgres.gmi53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Acontent/blog/In-praise-of-Postgres.md101+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 154 insertions(+), 0 deletions(-)

diff --git a/content/blog/In-praise-of-Postgres.gmi b/content/blog/In-praise-of-Postgres.gmi @@ -0,0 +1,53 @@ +After writing Praise for Alpine Linux, I have decided to continue writing more articles in praise of good software. Today, I’d like to tell you a bit about PostgreSQL. + +Many people don’t understand how old Postgres truly is: the first release¹ was in July of 1996. It used this logo: + +=> https://l.sr.ht/Ye7j.jpg A “logo” which depicts the word “PostgreSQL” in a 3D chrome font bursting through a brick wall from space. No, seriously. + +After 25 years of persistence, and a better logo design, Postgres stands today as one of the most significant pillars of profound achievement in free software, alongside the likes of Linux and Firefox. PostgreSQL has taken a complex problem and solved it to such an effective degree that all of its competitors are essentially obsolete, perhaps with the exception of SQLite. + +For a start, Postgres is simply an incredibly powerful, robust, and reliable piece of software, providing the best implementation of SQL.² It provides a great deal of insight into its own behavior, and allows the experienced operator to fine-tune it to achieve optimal performance. It supports a broad set of SQL features and data types, with which I have always been able to efficiently store and retrieve my data. SQL is usually the #1 bottleneck in web applications, and Postgres does an excellent job of providing you with the tools necessary to manage that bottleneck. + +Those tools are also exceptionally well-documented. The PostgreSQL documentation is incredibly in-depth. It puts the rest of us to shame, really. Not only do they have comprehensive reference documentation which exhaustively describes every feature, but also vast amounts of prose which explains the internal design, architecture, and operation of Postgres, plus detailed plain-English explanations of how various high-level tasks can be accomplished, complete with the necessary background to understand those tasks. There’s essentially no reason to ever read a blog post or Stack Overflow answer about how to do something with Postgres — the official docs cover every aspect of the system in great depth. + +=> https://www.postgresql.org/docs/current/index.html PostgreSQL's latest documentation + +The project is maintained by a highly disciplined team of engineers. I have complete confidence in their abilities to handle matters of performance, regression testing, and security. They publish meticulously detailed weekly development updates, as well as thorough release notes that equips you with sufficient knowledge to confidently run updates on your deployment. Their git discipline is also legendary — here’s the latest commit at the time of writing: + +``` +postgres_fdw: Fix issues with generated columns in foreign tables. + +postgres_fdw imported generated columns from the remote tables as plain +columns, and caused failures like "ERROR: cannot insert a non-DEFAULT +value into column "foo"" when inserting into the foreign tables, as it +tried to insert values into the generated columns. To fix, we do the +following under the assumption that generated columns in a postgres_fdw +foreign table are defined so that they represent generated columns in +the underlying remote table: + +* Send DEFAULT for the generated columns to the foreign server on insert + or update, not generated column values computed on the local server. +* Add to postgresImportForeignSchema() an option "import_generated" to + include column generated expressions in the definitions of foreign + tables imported from a foreign server. The option is true by default. + +The assumption seems reasonable, because that would make a query of the +postgres_fdw foreign table return values for the generated columns that +are consistent with the generated expression. + +While here, fix another issue in postgresImportForeignSchema(): it tried +to include column generated expressions as column default expressions in +the foreign table definitions when the import_default option was enabled. + +Per bug #16631 from Daniel Cherniy. Back-patch to v12 where generated +columns were added. + +Discussion: https://postgr.es/m/16631-e929fe9db0ffc7cf%40postgresql.org +``` + +They’re all like this. + +Ultimately, PostgreSQL is a technically complex program which requires an experienced and skilled operator to be effective. Learning to use it is a costly investment, even if it pays handsomely. Though Postgres has occasionally frustrated or confused me, on the whole my feelings for it are overwhelmingly positive. It’s an incredibly well-made product and its enormous and still-growing successes are very well-earned. When I think of projects which have made the most significant impacts on the free software ecosystem, and on the world at large, PostgreSQL has a place on that list. + +¹ The first release of Postgre“SQL”. Its lineage can be traced further back. +² No qualifiers. It’s straight-up the best implementation of SQL. diff --git a/content/blog/In-praise-of-Postgres.md b/content/blog/In-praise-of-Postgres.md @@ -0,0 +1,101 @@ +--- +title: In praise of PostgreSQL +date: 2021-08-05 +outputs: [html, gemtext] +--- + +After writing [Praise for Alpine Linux][0], I have decided to continue writing +more articles in praise of good software. Today, I'd like to tell you a bit +about [PostgreSQL][1]. + +[0]: gemini://drewdevault.com/2021/05/06/Praise-for-Alpine-Linux.gmi +[1]: https://www.postgresql.org + +Many people don't understand how old Postgres truly is: the first release[^1] +was in July of 1996. It used this logo: + +[^1]: The first release of Postgre**SQL**. Its lineage can be traced further back. + +![A "logo" which depicts the word "PostgreSQL" in a 3D chrome font bursting through a brick wall from space. No, seriously.](https://l.sr.ht/Ye7j.jpg) + +After 25 years of persistence, and a better logo design, Postgres stands today +as one of the most significant pillars of profound achievement in free software, +alongside the likes of Linux and Firefox. PostgreSQL has taken a complex problem +and *solved* it to such an effective degree that all of its competitors are +essentially obsolete, perhaps with the exception of SQLite. + +For a start, Postgres is simply an incredibly powerful, robust, and reliable +piece of software, providing the best implementation of SQL.[^2] +It provides a great deal of insight into its own behavior, and allows +the experienced operator to fine-tune it to achieve optimal performance. It +supports a broad set of SQL features and data types, with which I have always +been able to efficiently store and retrieve my data. SQL is usually the #1 +bottleneck in web applications, and Postgres does an excellent job of providing +you with the tools necessary to manage that bottleneck. + +[^2]: No qualifiers. It's straight-up the best implementation of SQL. + +Those tools are also exceptionally well-documented. The [PostgreSQL +documentation][2] is *incredibly* in-depth. It puts the rest of us to shame, +really. Not only do they have comprehensive reference documentation which +exhaustively describes every feature, but also vast amounts of prose which +explains the internal design, architecture, and operation of Postgres, plus +detailed plain-English explanations of how various high-level tasks can be +accomplished, complete with the necessary background to *understand* those +tasks. There's essentially no reason to ever read a blog post or Stack Overflow +answer about how to do something with Postgres &mdash; the official docs cover +every aspect of the system in great depth. + +[2]: https://www.postgresql.org/docs/current/index.html + +The project is maintained by a highly disciplined team of engineers. I have +complete confidence in their abilities to handle matters of performance, +regression testing, and security. They publish meticulously detailed weekly +development updates, as well as thorough release notes that equips you with +sufficient knowledge to confidently run updates on your deployment. Their git +discipline is also legendary &mdash; here's the [latest commit][3] at the time +of writing: + +[3]: https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=aa769f80ed80b7adfbdea9a6bc267ba4aeb80fd7 + +``` +postgres_fdw: Fix issues with generated columns in foreign tables. + +postgres_fdw imported generated columns from the remote tables as plain +columns, and caused failures like "ERROR: cannot insert a non-DEFAULT +value into column "foo"" when inserting into the foreign tables, as it +tried to insert values into the generated columns. To fix, we do the +following under the assumption that generated columns in a postgres_fdw +foreign table are defined so that they represent generated columns in +the underlying remote table: + +* Send DEFAULT for the generated columns to the foreign server on insert + or update, not generated column values computed on the local server. +* Add to postgresImportForeignSchema() an option "import_generated" to + include column generated expressions in the definitions of foreign + tables imported from a foreign server. The option is true by default. + +The assumption seems reasonable, because that would make a query of the +postgres_fdw foreign table return values for the generated columns that +are consistent with the generated expression. + +While here, fix another issue in postgresImportForeignSchema(): it tried +to include column generated expressions as column default expressions in +the foreign table definitions when the import_default option was enabled. + +Per bug #16631 from Daniel Cherniy. Back-patch to v12 where generated +columns were added. + +Discussion: https://postgr.es/m/16631-e929fe9db0ffc7cf%40postgresql.org +``` + +[They're all like this](https://git.postgresql.org/gitweb/?p=postgresql.git). + +Ultimately, PostgreSQL is a technically complex program which requires an +experienced and skilled operator to be effective. Learning to use it is a costly +investment, even if it pays handsomely. Though Postgres has occasionally +frustrated or confused me, on the whole my feelings for it are overwhelmingly +positive. It's an incredibly well-made product and its enormous and +still-growing successes are very well-earned. When I think of projects which +have made the most significant impacts on the free software ecosystem, and on +the world at large, PostgreSQL has a place on that list.