Re: [Proposal] Fully WAL logged CREATE DATABASE - No Checkpoints

Julien Rouhaud <rjuju123@gmail.com>

From: Julien Rouhaud <rjuju123@gmail.com>
To: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
Cc: andrew@dunslane.net, hlinnaka@iki.fi, dilipbalaut@gmail.com, pgsql-hackers@lists.postgresql.org
Date: 2021-06-16T06:48:18Z
Lists: pgsql-hackers
On Wed, Jun 16, 2021 at 03:27:21PM +0900, Kyotaro Horiguchi wrote:
> 
> If we are willing to maintain the two methods.
> Couldn't we just skip the checkpoints if the database is known to
> "clean", which means no page has been loaded for the database since
> startup? We can use the "template" mark to reject connections to the
> database.  (I'm afraid that we also should prevent vacuum to visit the
> template databases, but...)

There's already a datallowconn for that purpose.  Modifying template databases
is a common practice and we shouldn't prevent that.

But having the database currently doesn't accepting connection doesn't mean that
there is no dirty buffer and/or pending unlink, so it doesn't look like
something that could be optimized, at least for the majority of use cases.



Commits

  1. When using the WAL-logged CREATE DATABASE strategy, bulk extend.

  2. Avoid using a fake relcache entry to own an SmgrRelation.

  3. Fix data-corruption hazard in WAL-logged CREATE DATABASE.

  4. initdb: When running CREATE DATABASE, use STRATEGY = WAL_COPY.

  5. Simplify a needlessly-complicated regular expression.

  6. In 020_createdb.pl, change order of command-line arguments.

  7. Add new block-by-block strategy for CREATE DATABASE.

  8. Fix replay of create database records on standby

  9. Refactor code for reading and writing relation map files.

  10. Replace RelationOpenSmgr() with RelationGetSmgr().

  11. Refactor the fsync queue for wider use.