Re: [PATCH] Fix pg_dump --no-tablespaces for the custom format

From: Christopher Baines <mail(at)cbaines(dot)net>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: pgsql-hackers(at)lists(dot)postgresql(dot)org
Subject: Re: [PATCH] Fix pg_dump --no-tablespaces for the custom format
Date: 2020-05-16 07:20:29
Message-ID: 877dxcny6a.fsf@cbaines.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> writes:

> Christopher Baines <mail(at)cbaines(dot)net> writes:
>> So I'm new to poking around in the PostgreSQL code, so this is a bit of
>> a shot in the dark. I'm having some problems with pg_dump, and a
>> database with tablespaces. A couple of the tables are not in the default
>> tablespace, and I want to ignore this for the dump.
>
> I think you've misunderstood how the pieces fit together. A lot of
> the detail-filtering switches, including --no-tablespaces, work on
> the output side of the "archive" format. While you can't really tell
> the difference in pg_dump text mode, the implication for custom-format
> output is that the info is always there in the archive file, and you
> give the switch to pg_restore if you don't want to see the info.
> This is more flexible since you aren't compelled to make the decision
> up-front, and it doesn't really cost anything to include such info in
> the archive. (Obviously, table-filtering switches don't work that
> way, since with those there can be a really large cost in file size
> to include unwanted data.)
>
> So from my perspective, things are working fine and this patch would
> break it.
>
> If you actually want to suppress this info from getting into the
> archive file, you'd have to give a very compelling reason for
> breaking this behavior for other people.

Thanks for getting back to me Tom :)

I don't really follow how having it do something more along the lines of
how it's documented would both be less flexible and break existing uses
of pg_dump. You're not prevented from including tablespace assignments,
just don't pass --no-tablespaces, and your now able to not include them
for the archive formats, just like the plain format, which in my view
increases the flexibility of the tool, since something new is possible.

I realise that for people who are passing --no-tablespaces, without
realising it does nothing combined with the archive formats, that
actually not including tablespace assignments will change the behaviour
for them, but as above, I'd see this as a positive change, as it makes
the tooling more powerful (and simpler to understand as well).

I see now that while the --help output doesn't capture the nuances:

--no-tablespaces do not dump tablespace assignments

The documentation does:

--no-tablespaces

Do not output commands to select tablespaces. With this option, all
objects will be created in whichever tablespace is the default
during restore.

This option is only meaningful for the plain-text format. For the
archive formats, you can specify the option when you call
pg_restore.

Thanks again,

Chris

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message legrand legrand 2020-05-16 09:01:35 Re: Is it useful to record whether plans are generic or custom?
Previous Message Daniel Gustafsson 2020-05-16 07:16:54 Re: Potentially misleading name of libpq pass phrase hook