Re: Dumping/restoring fails on inherited generated column
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Peter Eisentraut <peter.eisentraut@2ndquadrant.com>
Cc: pgsql-hackers@lists.postgresql.org
Date: 2020-02-03T19:32:41Z
Lists: pgsql-hackers
Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes: > On 2019-12-04 21:36, Tom Lane wrote: >> I wonder if the right fix is to not generate a DO_ATTRDEF >> object at all for generated columns in child tables. Am >> I right in guessing that we propagate generated-ness to >> child tables automatically? > Right. New patch using that approach attached. (Could use more > extensive comments.) This looks more plausible than the previous attempt, but it's clearly still not right, because this is what it changes in the regression test dump: --- r.dump.head 2020-02-03 14:16:15.774305437 -0500 +++ r.dump.patch 2020-02-03 14:18:08.599109703 -0500 @@ -15244,14 +15244,7 @@ -- Name: gtest1_1 b; Type: DEFAULT; Schema: public; Owner: postgres -- -ALTER TABLE ONLY public.gtest1_1 ALTER COLUMN b SET DEFAULT (a * 2); - - --- --- Name: gtest30_1 b; Type: DEFAULT; Schema: public; Owner: postgres --- - -ALTER TABLE ONLY public.gtest30_1 ALTER COLUMN b SET DEFAULT (a * 2); +ALTER TABLE ONLY public.gtest1_1 ALTER COLUMN b SET DEFAULT NULL; -- This is showing us at least two distinct problems. Now as for "gtest30_1", what we have is that in the parent table "gtest30", column b exists but it has no default; the generated property is only added at the child table gtest30_1. So we need to emit ALTER COLUMN SET GENERATED ALWAYS for gtest30_1.b. HEAD is already doing the wrong thing there (it's emitting the expression, but as a plain default not GENERATED). And this patch makes it emit nothing, even worse. I think the key point here is that "attislocal" refers to whether the column itself is locally defined, not to whether its default is. Things are evidently also going wrong for "gtest1_1". In that case the generated property is inherited from the parent gtest1, so we shouldn't be emitting anything ... how come the patch fails to make it do that? regards, tom lane
Commits
-
Fix ALTER TABLE / INHERIT with generated columns
- 13ff139a2384 12.7 landed
- 64190d65f299 13.3 landed
- a970edbed306 14.0 landed
-
pg_dump: Fix dumping of inherited generated columns
- 1dd6baf78802 12.6 landed
- 1d3ce0223c6a 13.2 landed
- 0bf83648a52d 14.0 landed
-
Disallow ALTER TABLE ONLY / DROP EXPRESSION
- 539775981746 13.1 landed
- bf797a8d9768 14.0 landed
-
Fix several DDL issues of generated columns versus inheritance
- 086ffddf3656 13.0 cited