Re: [HACKERS] pg_upgrade failed with error - ERROR: column "a" in child table must be marked NOT NULL
Michael Paquier <michael.paquier@gmail.com>
From: Michael Paquier <michael.paquier@gmail.com>
To: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Cc: Ali Akbar <the.apaan@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, tushar <tushar.ahuja@enterprisedb.com>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2017-12-13T02:10:48Z
Lists: pgsql-hackers
On Wed, Dec 13, 2017 at 10:41 AM, Amit Langote <Langote_Amit_f8@lab.ntt.co.jp> wrote: > On 2017/12/13 9:22, Ali Akbar wrote: >> For me, it's better to prevent that from happening. So, attempts to >> DROP NOT NULL on the child must be rejected. The attached patch does >> that. >> >> Unfortunately, pg_class has no "has_parent" attribute, so in this >> patch, it hits pg_inherits everytime DROP NOT NULL is attempted. >> >> Notes: >> - It looks like we could remove the parent partition checking above? >> Because the new check already covers what it does > > I noticed that too. > > So, if we're going to prevent DROP NOT NULL on *all* child table (not just > partitions), we don't need the code that now sits there to prevent that > only for partitions. It is not the first time that this topic shows up. See for example this thread from myself's version of last year: https://www.postgresql.org/message-id/CAB7nPqTPXgX9HiyhhtAgpW7jbA1iskMCSoqXPEEB_KYXYy1E1Q@mail.gmail.com Or this one: http://www.postgresql.org/message-id/21633.1448383428@sss.pgh.pa.us And the conclusion is that we don't want to do what you are doing here, and that it would be better to store NOT NULL constraints in a way similar to CHECK constraints. > How about: ".. if some parent has the same" > > + heap_close(parent, AccessShareLock); > > Maybe, we shouldn't be dropping the lock so soon. Yes, such things usually need to be kept until the end of the transaction, and usually you need to be careful about potential lock upgrades that could cause deadlocks. This patch looks wrong for both of those things. -- Michael
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix new pg_upgrade query not to rely on regnamespace
- f943e2339f6c 16.10 landed
- bd48455d88a8 15.14 landed
- bcb8d47cdd5e 17.6 landed
- 94dc2b37baee 14.19 landed
- 708469281ea8 13.22 landed
- 1e007722fa86 18.0 landed
- 144ad723a448 19 (unreleased) landed
-
pg_upgrade: check for inconsistencies in not-null constraints w/inheritance
- f63e408e894c 16.10 landed
- f295494d338c 19 (unreleased) landed
- ea3386cc784a 14.19 landed
- b8b2e60527c6 17.6 landed
- b0f0e2221f42 13.22 landed
- 0f49586850a9 15.14 landed
- 07da2985d6bf 18.0 landed
-
Apply ALTER ... SET NOT NULL recursively in ALTER ... ADD PRIMARY KEY.
- c30f1770a93d 10.0 landed