PostgreSQL 95
Someone at FOSDEM 2023 asked the question: "What happens when PostgreSQL rolls over the version number to 95? Will this cause problems like back then in Windows?"
What does that even mean? When Microsoft released the version after Windows 98, they opted for naming it Windows 10, not Windows 9. Because apparently a lot of code out there checks if the string starts with "Windows 9" and then assumes that the OS is one of the very old ones. This might not be the only such problem, as another blog article by Microsoft shows. Apparently they used "3.95" for the Windows 95 internal version, because lazy programmers.
You may also remember that there is already a "Postgres95", released around 1994 (shortly before Windows 95 was released). This was before the name was "PostgreSQL", and this is the first version which had SQL support. Before that, QUEL was the query language.
Enough history. And even though the release of PostgreSQL 95 is still a few years out, this raises two questions:
- Does today's source code work (aka: compile, and pass tests) with version number 95?
- Does your application work against version PostgreSQL 95?
Does the source code work with version number 95?
The first question is easy to answer:
- Download PostgreSQL source code
- Change the version number to 95
- Compile everything
- Run regression tests
The latest version (by the time I'm writing this article) is 15.2. Download the source from the main website.
There are only two files (one, really) which hold the version information: configure and configure.ac.
sed -i 's/15.2/95/' configure
sed -i 's/15.2/95/' configure.ac
After that, compile everything, and init a database:
make
...
make: Leaving directory '/home/ads/15/postgresql-15.2/config'
( /home/ads/15/install/bin/initdb --pgdata=/home/ads/15/data )
The files belonging to this database system will be owned by user "ads".
This user must also own the server process.
The database cluster will be initialized with this locale configuration:
provider: libc
LC_COLLATE: en_US.UTF-8
LC_CTYPE: en_US.UTF-8
LC_MESSAGES: en_US.UTF-8
LC_MONETARY: de_DE.UTF-8
LC_NUMERIC: de_DE.UTF-8
LC_TIME: de_DE.UTF-8
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
creating directory /home/ads/15/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Europe/Berlin
creating configuration files ... ok
running bootstrap script ... ok
performing post-bootstrap initialization ... ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
/home/ads/15/install/bin/pg_ctl -D /home/ads/15/data -l logfile start
That works. No surprises here. It also passes all the regression tests:
=======================
All 211 tests passed.
=======================
Starting the database works without problems:
PATH=/home/ads/15/install/bin:$PATH /home/ads/15/install/bin/postmaster -D /home/ads/15/data
2023-02-11 00:58:48.387 CET [476767] LOG: starting PostgreSQL 95 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 12.2.0-3ubuntu1) 12.2.0, 64-bit
2023-02-11 00:58:48.387 CET [476767] LOG: listening on IPv4 address "127.0.0.1", port 5455
2023-02-11 00:58:48.393 CET [476767] LOG: listening on Unix socket "/tmp/.s.PGSQL.5455"
2023-02-11 00:58:48.401 CET [476770] LOG: database system was shut down at 2023-02-11 00:45:33 CET
2023-02-11 00:58:48.407 CET [476767] LOG: database system is ready to accept connections
Connecting to the database works as well:
PATH=/home/ads/15/install/bin:$PATH /home/ads/15/install/bin/psql postgres
psql (95)
Type "help" for help.
And it shows the correct version:
postgres=# SELECT version();
version
-----------------------------------------------------------------------------------------------
PostgreSQL 95 on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 12.2.0-3ubuntu1) 12.2.0, 64-bit
(1 row)
postgres=# SHOW server_version;
server_version
----------------
95
(1 row)
postgres=# SHOW server_version_num;
server_version_num
--------------------
950000
(1 row)
Even though I changed the version from 15.2 to just 95, without a minor number, everything works out of the box. The source code is well prepared for the future!
Does your application work against version PostgreSQL 95?
Obviously that's something only you can answer, but you can already create a CI/CD pipeline today and test your application against a future version of PostgreSQL. Instructions above.
psql works, as seen above. Let's try out pgAdmin, one of the standard management applications for PostgreSQL.

pgAdmin connection settings - general settings

pgAdmin connection settings - connection settings

pgAdmin - server overview
pgAdmin works without problems.
Conclusion
Surely a PostgreSQL 95 version is still many years out, nevertheless the question asked at FOSDEM is a good one. Maybe not test for a version 80 years out, but will your application work in 2 or 5 years, or does it require major changes along the way? It also depends how closely the application follows the SQL standard, or uses PostgreSQL internals. And if drivers and protocols change over time. And finally, if your application has hardcoded version checks, like the ones which Microsoft had to deal with.
And let's hope our beloved elephant is still around to celebrate a version number 95.
Comments
Display comments as Linear | Threaded