pg.ddx.io  pgsql-bugs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Heikki Linnakangas <hlinnaka@iki.fi>
To: pgsql-bugs@lists.postgresql.org <pgsql-bugs@lists.postgresql.org>
Subject: Detaching a child table makes an expression using it unrestorable
Date: Thu, 10 Sep 2026 17:12:31 +0300
Message-ID: <c638c39b-de93-46a4-b7e9-e5613952fcb3@iki.fi> (raw)

I bumped into a sequence of commands that breaks pg_dump & restore:

------------
create table at_tab (a int, b int);
create table at_tab_child (a int, b int);
alter table at_tab_child inherit at_tab;

-- You can use the child's rowtype in the DEFAULT without a cast.
CREATE FUNCTION func_with_default(
   arg at_tab DEFAULT ('(1, 2)'::at_tab_child)
) RETURNS integer LANGUAGE plpgsql as $$
begin
   return arg.b;
end;
$$;

-- We allow detaching the child from the parent, despite the DEFAULT
-- expression. That is a not good, because if you try to recreate the
-- function, it's not accepted. I.e. pg_dump & restore is broken
alter table at_tab_child no inherit at_tab;
------------

The function still works after that. But if you run pg_dump (or do \ef 
or something), the CREATE FUNCTION is deparsed as above, and when you 
try to restore it you get an error:

ERROR:  argument of DEFAULT must be type at_tab, not type at_tab_child
LINE 1: ...CTION public.func_with_default(arg at_tab DEFAULT '(1,2)'::a...

You get the same effect with ATTACH/DETACH PARTITION instead of 
INHERIT/NO INHERIT.

- Heikki







view thread (7+ messages)  latest in thread

Message-ID: <c638c39b-de93-46a4-b7e9-e5613952fcb3@iki.fi>
Permalink:  ../c638c39b-de93-46a4-b7e9-e5613952fcb3@iki.fi/
Also on:    postgresql.org/message-id/c638c39b-de93-46a4-b7e9-e5613952fcb3@iki.fi

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-bugs@postgresql.org
  Cc: hlinnaka@iki.fi, pgsql-bugs@lists.postgresql.org
  Subject: Re: Detaching a child table makes an expression using it unrestorable
  In-Reply-To: <c638c39b-de93-46a4-b7e9-e5613952fcb3@iki.fi>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

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