pg.ddx.io  pgsql-bugs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
9+ messages / 5 participants
[nested] [flat]

Commits from this thread:
  2018-08-22 b965f26171 4ed59e02f5 cb282eab1a  Do not dump identity sequences with excluded parent table
* BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
@ 2018-08-20 19:38 PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  0 siblings, 1 reply; 9+ messages in thread

From: PG Bug reporting form @ 2018-08-20 19:38 UTC (permalink / raw)
  To: pgsql-bugs@lists.postgresql.org; +Cc: abelisto@gmail.com

The following bug has been logged on the website:

Bug reference:      15343
Logged by:          Andy Abelisto
Email address:      abelisto@gmail.com
PostgreSQL version: 10.5
Operating system:   Linux Mint 19 Tara
Description:        

To reproduce:
$ createdb foo
$ psql foo -c "create table bar(i int generated by default as identity
primary key);"
$ pg_dump foo --exclude-table=bar
Segmentation fault (core dumped)



^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
@ 2018-08-21 00:37 ` David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  0 siblings, 1 reply; 9+ messages in thread

From: David Rowley @ 2018-08-21 00:37 UTC (permalink / raw)
  To: abelisto@gmail.com; pgsql-bugs@lists.postgresql.org

> To reproduce:
> $ createdb foo
> $ psql foo -c "create table bar(i int generated by default as identity
> primary key);"
> $ pg_dump foo --exclude-table=bar
> Segmentation fault (core dumped)

This crashes during dumpSequence() when the owning_tab's attnames are
accessed. This array is NULL since we didn't populate it in
getTableAttrs due to the table being !interesting.

I think the fix depends exactly on what we want the behaviour to be
here.  Should dumpSequence() still dump out a CREATE SEQUENCE
statement for this, or should we just ignore the sequence?  I imagine
we should just ignore identity sequences when we're not going to dump
the table that owns them. It looks like that would require a small
modification in getOwnedSeqs().  Otherwise we'd need something like
the attached to still dump out the CREATE SEQUENCE.

-- 
 David Rowley                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

pg_dump_seq_fix.patch (application/octet-stream, 1.3K) download diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index d5f1269f93..fbf4e1356b 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -16738,6 +16738,7 @@ dumpSequence(Archive *fout, TableInfo *tbinfo) PQExpBuffer query = createPQExpBuffer(); PQExpBuffer delqry = createPQExpBuffer(); char *qseqname; + TableInfo *owning_tab; qseqname = pg_strdup(fmtId(tbinfo->dobj.name)); @@ -16849,10 +16850,13 @@ dumpSequence(Archive *fout, TableInfo *tbinfo) tbinfo->dobj.catId.oid); } - if (tbinfo->is_identity_sequence) + /* + * Only dump the ALTER TABLE portion if the table is not to be excluded + * from the dump. + */ + if (tbinfo->is_identity_sequence && + (owning_tab = findTableByOid(tbinfo->owning_tab))->interesting) { - TableInfo *owning_tab = findTableByOid(tbinfo->owning_tab); - appendPQExpBuffer(query, "ALTER TABLE %s ", fmtQualifiedDumpable(owning_tab)); @@ -16895,7 +16899,7 @@ dumpSequence(Archive *fout, TableInfo *tbinfo) " CACHE %s%s", cache, (cycled ? "\n CYCLE" : "")); - if (tbinfo->is_identity_sequence) + if (tbinfo->is_identity_sequence && owning_tab->interesting) appendPQExpBufferStr(query, "\n);\n"); else appendPQExpBufferStr(query, ";\n");
^ permalink raw reply [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
@ 2018-08-21 01:19   ` Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  0 siblings, 1 reply; 9+ messages in thread

From: Alvaro Herrera @ 2018-08-21 01:19 UTC (permalink / raw)
  To: David Rowley <david.rowley@2ndquadrant.com>; +Cc: abelisto@gmail.com; pgsql-bugs@lists.postgresql.org

On 2018-Aug-21, David Rowley wrote:

> > To reproduce:
> > $ createdb foo
> > $ psql foo -c "create table bar(i int generated by default as identity
> > primary key);"
> > $ pg_dump foo --exclude-table=bar
> > Segmentation fault (core dumped)

> I think the fix depends exactly on what we want the behaviour to be
> here.  Should dumpSequence() still dump out a CREATE SEQUENCE
> statement for this, or should we just ignore the sequence?  I imagine
> we should just ignore identity sequences when we're not going to dump
> the table that owns them. It looks like that would require a small
> modification in getOwnedSeqs().

Yeah, we should omit the sequence too.  I don't see any principled
reason to think that the sequence is interesting on its own.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
@ 2018-08-21 01:49     ` Michael Paquier <michael@paquier.xyz>
  2018-08-21 05:46       ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  0 siblings, 1 reply; 9+ messages in thread

From: Michael Paquier @ 2018-08-21 01:49 UTC (permalink / raw)
  To: Alvaro Herrera <alvherre@2ndquadrant.com>; +Cc: David Rowley <david.rowley@2ndquadrant.com>; abelisto@gmail.com; pgsql-bugs@lists.postgresql.org

On Mon, Aug 20, 2018 at 10:19:49PM -0300, Alvaro Herrera wrote:
> Yeah, we should omit the sequence too.  I don't see any principled
> reason to think that the sequence is interesting on its own.

I was just looking at this issue, or both of you are already on it?
--
Michael

Attachments:

  signature.asc (application/pgp-signature, 832B) download

^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
@ 2018-08-21 05:46       ` David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 06:24         ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  2018-08-21 11:12         ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  0 siblings, 2 replies; 9+ messages in thread

From: David Rowley @ 2018-08-21 05:46 UTC (permalink / raw)
  To: Michael Paquier <michael@paquier.xyz>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; abelisto@gmail.com; pgsql-bugs@lists.postgresql.org

On 21 August 2018 at 13:49, Michael Paquier <michael@paquier.xyz> wrote:
> On Mon, Aug 20, 2018 at 10:19:49PM -0300, Alvaro Herrera wrote:
>> Yeah, we should omit the sequence too.  I don't see any principled
>> reason to think that the sequence is interesting on its own.
>
> I was just looking at this issue, or both of you are already on it?

It's already in my head what it should look like, so I can write it,
although it might not appear until tomorrow, as I've reached the end
of my day now.

-- 
 David Rowley                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services




^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  2018-08-21 05:46       ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
@ 2018-08-21 06:24         ` Michael Paquier <michael@paquier.xyz>
  1 sibling, 0 replies; 9+ messages in thread

From: Michael Paquier @ 2018-08-21 06:24 UTC (permalink / raw)
  To: David Rowley <david.rowley@2ndquadrant.com>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; abelisto@gmail.com; pgsql-bugs@lists.postgresql.org

On Tue, Aug 21, 2018 at 05:46:56PM +1200, David Rowley wrote:
> It's already in my head what it should look like, so I can write it,
> although it might not appear until tomorrow, as I've reached the end
> of my day now.

Nice to hear.  Please feel free to post at your convenient time if you
have something.
--
Michael

Attachments:

  signature.asc (application/pgp-signature, 832B) download

^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  2018-08-21 05:46       ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
@ 2018-08-21 11:12         ` David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 13:01           ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
  1 sibling, 1 reply; 9+ messages in thread

From: David Rowley @ 2018-08-21 11:12 UTC (permalink / raw)
  To: Michael Paquier <michael@paquier.xyz>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; ND Abelisto <abelisto@gmail.com>; pgsql-bugs@lists.postgresql.org

On 21 August 2018 at 17:46, David Rowley <david.rowley@2ndquadrant.com> wrote:
> On 21 August 2018 at 13:49, Michael Paquier <michael@paquier.xyz> wrote:
>> I was just looking at this issue, or both of you are already on it?
>
> It's already in my head what it should look like, so I can write it,
> although it might not appear until tomorrow, as I've reached the end
> of my day now.

I've attached what I had in mind.  The header comment for
getOwnedSeqs() gives me the impression this is the best place to
locate this code.

-- 
 David Rowley                   http://www.2ndQuadrant.com/
 PostgreSQL Development, 24x7 Support, Training & Services

Attachments:

pg_dump_identity_seq_fix.patch (application/octet-stream, 1.0K) download diff --git a/src/bin/pg_dump/pg_dump.c b/src/bin/pg_dump/pg_dump.c index d5f1269f93..89056207b9 100644 --- a/src/bin/pg_dump/pg_dump.c +++ b/src/bin/pg_dump/pg_dump.c @@ -6636,8 +6636,20 @@ getOwnedSeqs(Archive *fout, TableInfo tblinfo[], int numTables) seqinfo->owning_tab, seqinfo->dobj.catId.oid); /* - * We need to dump the components that are being dumped for the table - * and any components which the sequence is explicitly marked with. + * Only dump identity sequences if we're going to dump the table that + * it belongs to. + */ + if (owning_tab->dobj.dump == DUMP_COMPONENT_NONE && + seqinfo->is_identity_sequence) + { + seqinfo->dobj.dump = DUMP_COMPONENT_NONE; + continue; + } + + /* + * Otherwise we need to dump the components that are being dumped for + * the table and any components which the sequence is explicitly + * marked with. * * We can't simply use the set of components which are being dumped * for the table as the table might be in an extension (and only the
^ permalink raw reply [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  2018-08-21 05:46       ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 11:12         ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
@ 2018-08-21 13:01           ` Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
  2018-08-22 05:24             ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  0 siblings, 1 reply; 9+ messages in thread

From: Peter Eisentraut @ 2018-08-21 13:01 UTC (permalink / raw)
  To: David Rowley <david.rowley@2ndquadrant.com>; Michael Paquier <michael@paquier.xyz>; +Cc: Alvaro Herrera <alvherre@2ndquadrant.com>; ND Abelisto <abelisto@gmail.com>; pgsql-bugs@lists.postgresql.org

On 21/08/2018 13:12, David Rowley wrote:
> On 21 August 2018 at 17:46, David Rowley <david.rowley@2ndquadrant.com> wrote:
>> On 21 August 2018 at 13:49, Michael Paquier <michael@paquier.xyz> wrote:
>>> I was just looking at this issue, or both of you are already on it?
>>
>> It's already in my head what it should look like, so I can write it,
>> although it might not appear until tomorrow, as I've reached the end
>> of my day now.
> 
> I've attached what I had in mind.  The header comment for
> getOwnedSeqs() gives me the impression this is the best place to
> locate this code.

Yes, that looks good to me.

-- 
Peter Eisentraut              http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services




^ permalink  raw  reply  [nested|flat] 9+ messages in thread

* Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column
  2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
  2018-08-21 00:37 ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 01:19   ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Alvaro Herrera <alvherre@2ndquadrant.com>
  2018-08-21 01:49     ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Michael Paquier <michael@paquier.xyz>
  2018-08-21 05:46       ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 11:12         ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column David Rowley <david.rowley@2ndquadrant.com>
  2018-08-21 13:01           ` Re: BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
@ 2018-08-22 05:24             ` Michael Paquier <michael@paquier.xyz>
  0 siblings, 0 replies; 9+ messages in thread

From: Michael Paquier @ 2018-08-22 05:24 UTC (permalink / raw)
  To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>; +Cc: David Rowley <david.rowley@2ndquadrant.com>; Alvaro Herrera <alvherre@2ndquadrant.com>; ND Abelisto <abelisto@gmail.com>; pgsql-bugs@lists.postgresql.org

On Tue, Aug 21, 2018 at 03:01:49PM +0200, Peter Eisentraut wrote:
> On 21/08/2018 13:12, David Rowley wrote:
>> I've attached what I had in mind.  The header comment for
>> getOwnedSeqs() gives me the impression this is the best place to
>> locate this code.
> 
> Yes, that looks good to me.

This got through the TAP tests because exclude_test_table only considers
dump_test.test_table as the table to exclude when processing the dumps.
I have tried to plug in a new column into this relation but that's
proving to be a hassle with a lot of test dependencies in need to be
changed.  Trying to add a new field in full_runs is also a PITA, as that
means adding a bunch of individual markers for each test.  The nicest
way I could think of would be to be able to pass down parameters to a
given run flag, but that would require more infrastructure.  I have
checked as well if an identity column within a table's extension, and
that's working as expected.

So committed the proposed fix and back-patched down to 10.
--
Michael

Attachments:

  signature.asc (application/pgp-signature, 832B) download

^ permalink  raw  reply  [nested|flat] 9+ messages in thread


end of thread, other threads:[~2018-08-22 05:24 UTC | newest]

Thread overview: 9+ messages (download: mbox mbox.gz follow: Atom feed)
-- links below jump to the message on this page --
2018-08-20 19:38 BUG #15343: Segmentation fault using pg_dump with --exclude-table if table contains identity column PG Bug reporting form <noreply@postgresql.org>
2018-08-21 00:37 ` David Rowley <david.rowley@2ndquadrant.com>
2018-08-21 01:19   ` Alvaro Herrera <alvherre@2ndquadrant.com>
2018-08-21 01:49     ` Michael Paquier <michael@paquier.xyz>
2018-08-21 05:46       ` David Rowley <david.rowley@2ndquadrant.com>
2018-08-21 06:24         ` Michael Paquier <michael@paquier.xyz>
2018-08-21 11:12         ` David Rowley <david.rowley@2ndquadrant.com>
2018-08-21 13:01           ` Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
2018-08-22 05:24             ` Michael Paquier <michael@paquier.xyz>

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox