Re: [PATCH] initdb: do not exit after warn_on_mount_point - Mailing list pgsql-hackers
From | Julien Rouhaud |
---|---|
Subject | Re: [PATCH] initdb: do not exit after warn_on_mount_point |
Date | |
Msg-id | 20220912050347.enrcgpa227r5ip34@jrouhaud Whole thread Raw |
In response to | [PATCH] initdb: do not exit after warn_on_mount_point (andrey.arapov@nixaid.com) |
Responses |
Re: [PATCH] initdb: do not exit after warn_on_mount_point
|
List | pgsql-hackers |
On Sun, Sep 11, 2022 at 06:22:21PM +0000, andrey.arapov@nixaid.com wrote: > September 11, 2022 12:18 PM, "Julien Rouhaud" <rjuju123@gmail.com> wrote: > > > Hi, > > > > On Sat, Sep 10, 2022 at 07:14:59PM +0000, andrey.arapov@nixaid.com wrote: > > > >> Have slightly improved the logic so that it does not report an error > >> "directory \"%s\" exists but is not empty" > >> when it is only supposed to warn the user about the mountpoint, without > >> exiting. > >> > >> To me, my patch looks like a typo fix where exit(1) should not be called on > >> the warn_on_mount_point(), but only warn and continue as more people are > >> mounting the device at `/var/lib/postgresql/data` (PGDATA) in the > >> containerized world (K8s deployments, especially now in the Akash Network I > >> am working for) for making sure their data persist. > > > > This definitely isn't a typo, as it's really strongly discouraged to use a > > mount point for the data directory. You can refer to this thread [1] for more > > explanations. > > > > [1] > > https://www.postgresql.org/message-id/flat/CAKoxK+6H40imynM5P31bf0DnpN-5f5zeROjcaj6BKVAjxdEA9w@mail. > > mail.com > > > I've read the "why not using a mountpoint as PGDATA?" thread [1] as well as > Bugzilla "postgresql-setup fails when /var/lib/pgsql/data is mount point" > thead [2] but could not find any good reason why not to mount the PGDATA > directly, except probably for the NFS mount point, but who does that anyway? What about this part in Tom's original answer: 3. If, some day, the filesystem is accidentally unmounted while the database is up, it will continue to write into files that are now getting placed in the mount-point directory on the parent volume. This usually results in an unrecoverably messed-up database by the time you realize what's going wrong. (There are horror stories about such cases in the PG community mailing list archives, dating from before we installed the don't-use-a-mount-point defenses in initdb.) > Everyone using containerized postgresql image cannot use /var/lib/postgresql > as the mountpoint but has to use /var/lib/postgresql/data instead due to this > issue [4] due to [5]. Hence, everyone using containerized version of > postgresql with the device (say Ceph's RBD) mounted over > /var/lib/postgresql/data directory has to either specify: > > - PGDATA=/var/lib/postgresql/data/<some-dir> > > OR > > make sure to remove $PGDATA/lost+found directory. initdb had this behavior for almost 10 years, and for good reasons: it prevents actual problems that were seen in the field. It's unfortunate that the docker postgres images didn't take that behavior into account, which was introduced more than a year before any work started on those images, but if you're not happy with those workarounds it's something that should be changed in the docker images. > Both of these hacks are only for the initdb to fail detect the mountpoint > which, on its own, is supposed to be only a warning which is seen from the > function name warn_on_mount_point() and its messages [6] look to be of only > advisory nature to me. As Tom confirmed at [1], you shouldn't assume anything about the criticality based on the function name. If anything, the "warn" part is only saying that the function itself won't exit(1). And yes this function is only adding information on the reason why the given directory can't be used, but it doesn't change the fact that the given directory can't be used. [1] https://www.postgresql.org/message-id/813162.1662908002@sss.pgh.pa.us
pgsql-hackers by date: