Re: Dumping/restoring fails on inherited generated column
От | Masahiko Sawada |
---|---|
Тема | Re: Dumping/restoring fails on inherited generated column |
Дата | |
Msg-id | CA+fd4k4fck6xzsF8mPWeVSZFBLtiA2cQxrPqBaYcoZGc+hZ=JQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Dumping/restoring fails on inherited generated column (Tom Lane <tgl@sss.pgh.pa.us>) |
Ответы |
Re: Dumping/restoring fails on inherited generated column
|
Список | pgsql-hackers |
On Thu, 16 Jul 2020 at 04:29, Tom Lane <tgl@sss.pgh.pa.us> wrote: > > Peter Eisentraut <peter.eisentraut@2ndquadrant.com> writes: > >> Right, there were a number of combinations that were not properly > >> handled. The attached patch should fix them all. It's made against > >> PG12 but also works on master. See contained commit message and > >> documentation for details. > > > committed to master and PG12 > > So ... this did not actually fix the dump/restore problem. In fact, > it's worse, because in HEAD I see two failures not one when doing the > same test proposed at the start of this thread: > > 1. make installcheck > 2. pg_dump -Fc regression >r.dump > 3. createdb r2 > 4. pg_restore -d r2 r.dump > > pg_restore: while PROCESSING TOC: > pg_restore: from TOC entry 6253; 2604 226187 DEFAULT gtest1_1 b postgres > pg_restore: error: could not execute query: ERROR: column "b" of relation "gtest1_1" is a generated column > Command was: ALTER TABLE ONLY public.gtest1_1 ALTER COLUMN b SET DEFAULT (a * 2); > > > pg_restore: from TOC entry 6279; 2604 227276 DEFAULT gtest30_1 b postgres > pg_restore: error: could not execute query: ERROR: cannot use column reference in DEFAULT expression > Command was: ALTER TABLE ONLY public.gtest30_1 ALTER COLUMN b SET DEFAULT (a * 2); > > > pg_restore: warning: errors ignored on restore: 2 > The minimum reproducer is: create table a (a int, b int generated always as (a * 2) stored); create table aa () inherits (a); pg_dump produces the following DDLs: CREATE TABLE public.a ( a integer, b integer GENERATED ALWAYS AS ((a * 2)) STORED ); CREATE TABLE public.aa ( ) INHERITS (public.a); ALTER TABLE ONLY public.aa ALTER COLUMN b SET DEFAULT (a * 2); However, the ALTER TABLE fails. By commit 086ffddf, the child tables must have the same generation expression as the expression defined in the parent. So I think pg_dump should not generate the last DDL. I've attached the patch fixing this issue. Apart from the fix, I wonder if we can add a test that dumps the database where executed 'make check' and restore it to another database. Regards, -- Masahiko Sawada http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services
Вложения
В списке pgsql-hackers по дате отправления: