On Sun, Apr 23, 2017 at 2:53 PM, Fabrice Bacchella
<fabrice.bacchella(a)orange.fr> wrote:
> Le 23 avr. 2017 à 07:59, Yedidyah Bar David <didi(a)redhat.com> a écrit :
>
>
> The main reason we require this is for pg_dump/pg_restore which are ran
> during setup/rollback (if needed). pg_dump can't know for sure that all
> the changes in the db were done using a client of its own version (that
> is, current machine usually), and if indeed a newer client was used, it
> might have used features that pg_dump of the lower version doesn't know
> how to back up (and especially pg_restore does not know how to restore).
> See also [1]. I seem to have tested there (can't remember anymore, see
> comment 13) 9.2 client with 9.5 server and it didn't work. pg_dump(1)
> manpage says:
>
> Because pg_dump is used to transfer data to newer versions of
> PostgreSQL, the output of pg_dump can be expected to load into
> PostgreSQL server versions newer than pg_dump's version. pg_dump can
> also dump from PostgreSQL servers older than its own version.
> (Currently, servers back to version 7.0 are supported.) However,
> pg_dump cannot dump from PostgreSQL servers newer than its own major
> version; it will refuse to even try, rather than risk making an invalid
> dump. Also, it is not guaranteed that pg_dump's output can be loaded
> into a server of an older major version — not even if the dump was
> taken from a server of that version. Loading a dump file into an older
> server may require manual editing of the dump file to remove syntax not
> understood by the older server. Use of the --quote-all-identifiers
> option is recommended in cross-version cases, as it can prevent
> problems arising from varying reserved-word lists in different
> PostgreSQL versions.
>
I don't get it, but I don't know pg so I might be wrong.
You have a client application (like ovirt) written using features from V1 of pg.
Right.
It's running on a server where version V2 is installing. For good reasons, V2 >=
V1 is needed.
Indeed.
The server is running a version V3. Again V3 >= V1 is needed. Except for major
version, does V3 => V2 is really needed ?
For oVirt itself, no.
And for backup the problem is the same. It must probably know every features used in the
application (so again being V1 or more). Why does it needs to match both V2 and V3 ? It
will probably fits V2 is installation is the same. But that not mandatory. In a java
application, the client library might be a jar provided by the application and pg_dump a
tool installed with native os packaging. But how can complain against V3 ?
pg_dump is indeed a tool installed from the OS. I copied above the relevant
part of its manpage - if you think it does a wrong thing, perhaps better
continue the discussion on postgresql lists.
For our concern, the only relevant fact is that we decided to backup the
db using pg_dump during setup, and to restore it on rollback. If you want
to make this backup optional, please open an RFE, as already requested, and
we can discuss this there.
But with ovirt we have V1=V2=V3,
Not exactly. Using your terminology, we have V1<=V2, V2=V3.
even for for patch level (9.4.8 against 9.4.11). What kind of feature
that ovirt don't know about might be missing ? I don't think ovirt might know
about any 9.4 since you talked about version 9.2 as the official supported version.
At the time, oVirt didn't check versions at all, and so failed on a
certain combination, and it was decided to require V2=V3, as a simple
and effective solution. This was also specifically discussed there,
as you can see for yourself, open to the public for review/comments.
Check especially comments 9 to 19 (in bz 1331168).
If you think we need a more delicate test, please open an RFE,
preferably providing the details I suggested that should be considered
for one.
Also please recall that you have a third, very simple, IMHO, option.
If for any reason you decided to have your server with version V3,
simply install V3 on your client machine (the oVirt engine). This
will be simple and solve all problems. If your concern is that the
OS does not supply pg V3, then it applies also to the OS of the
server. If that is a different OS, you are welcome to port oVirt
engine to that OS so you can have all you want at once.
You also have a fourth option - patch oVirt to not check for the
version, by reverting the patch that introduced this check (might
require a bit more work than "git revert", but not much):
https://gerrit.ovirt.org/59941
Of course, this will essentially be a fork, and I'd personally not
recommend it. But it's still an option.
Best,
--
Didi