Re: Skipping logical replication transactions on subscriber side - Mailing list pgsql-hackers
From | Noah Misch |
---|---|
Subject | Re: Skipping logical replication transactions on subscriber side |
Date | |
Msg-id | 20220622042814.GB4167527@rfd.leadboat.com Whole thread Raw |
In response to | Re: Skipping logical replication transactions on subscriber side (Robert Haas <robertmhaas@gmail.com>) |
Responses |
Re: Skipping logical replication transactions on subscriber side
|
List | pgsql-hackers |
On Mon, Jun 13, 2022 at 10:25:24AM -0400, Robert Haas wrote: > On Sun, Apr 17, 2022 at 11:22 PM Noah Misch <noah@leadboat.com> wrote: > > > Yes, but it could be false positives in some cases. For instance, the > > > column {oid, bool, XLogRecPtr} should be okay on ALIGNOF_DOUBLE == 4 > > > and 8 platforms but the new test fails. > > > > I'm happy with that, because the affected author should look for padding-free > > layouts before settling on your example layout. If the padding-free layouts > > are all unacceptable, the author should update the expected sanity_check.out > > to show the one row where the test "fails". > Perhaps instead we ought to legislate that NAMEDATALEN must > be a multiple of 8, or some such thing. > > The other constraint, that typalign='d' fields must always fall on an > 8 byte boundary, is probably less annoying in practice, but it's easy > to imagine a future catalog running into trouble. Let's say we want to > introduce a new catalog that has only an Oid column and a float8 > column. Perhaps with 0-3 bool or uint8 columns as well, or with any > number of NameData columns as well. Well, the only way to satisfy this > constraint is to put the float8 column first and the Oid column after > it, which immediately makes it look different from every other catalog > we have. > AFAICS, we could do that by: > > 1. De-supporting platforms that have this problem, or > 2. Introducing new typalign values, as Noah proposed back on April 2, or > 3. Somehow forcing values that are sometimes 4-byte aligned and > sometimes 8-byte aligned to be 8-byte alignment on all platforms On Mon, Jun 20, 2022 at 10:04:06AM -0400, Robert Haas wrote: > On Mon, Jun 20, 2022 at 9:52 AM Peter Eisentraut > <peter.eisentraut@enterprisedb.com> wrote: > > That means changing the system's ABI, so in the extreme case you then > > need to compile everything else to match as well. > > I think we wouldn't want to do that in a minor release, but doing it > in a new major release seems fine -- especially if only AIX is > affected. "Everything" isn't limited to PostgreSQL. The Perl ABI exposes large structs to plperl; a field of type double could require the AIX user to rebuild Perl with the same compiler option. Overall, this could be a textbook example of choosing between: - Mild harm (unaesthetic column order) to many people. - Considerable harm (dump/reload instead of pg_upgrade) to a small, unknown, possibly-zero quantity of people. Here's how I rank the options, from most-preferred to least-preferred: 1. Put new eight-byte fields at the front of each catalog, when in doubt. 2. On systems where double alignment differs from int64 alignment, require NAMEDATALEN%8==0. Upgrading to v16 would require dump/reload for AIX users changing NAMEDATALEN to conform to the new restriction. 3. Introduce new typalign values. Upgrading to v16 would require dump/reload for all AIX users. 4. De-support AIX. 5. From above, "Somehow forcing values that are sometimes 4-byte aligned and sometimes 8-byte aligned to be 8-byte alignment on all platforms". Upgrading to v16 would require dump/reload for all AIX users. 6. Require -qalign=natural on AIX. Upgrading to v16 would require dump/reload and possible system library rebuilds for all AIX users. I gather (1) isn't at the top of your ranking, or you wouldn't have written in. What do you think of (2)?
pgsql-hackers by date: