| From: | Dilip Kumar <dilipbalaut(at)gmail(dot)com> |
|---|---|
| To: | Álvaro Herrera <alvherre(at)kurilemu(dot)de> |
| Cc: | David Rowley <dgrowleyml(at)gmail(dot)com>, andrewbille(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org |
| Subject: | Re: BUG #19074: pg_dump from v18 loses the NOT NULL flag in the inherited table field when dumping v17-databases |
| Date: | 2025-10-06 12:04:36 |
| Message-ID: | CAFiTN-sfxzgd1ntJx=GPjsbvEkA-0YeaLsKdzMm=X5aUSDqL9g@mail.gmail.com |
| Views: | Whole Thread | Raw Message | Download mbox | Resend email |
| Thread: | |
| Lists: | pgsql-bugs |
On Mon, Oct 6, 2025 at 4:14 PM Álvaro Herrera <alvherre(at)kurilemu(dot)de> wrote:
>
> On 2025-Oct-06, Dilip Kumar wrote:
>
> > While quickly checking this commit, it seems the problem is that
> > before this commit we had a simple logic to add an additional ALTER
> > TABLE to SET NULL, if the attribute has a not null constraint but the
> > the parent from which it is inherited doesn't have not null constraint
> > [1]. Whereas after this commit, it seems we removed this ALTER
> > command and tried to add the not null constraint while creating the
> > inherited table itself, which is fine. But here the logic to identify
> > whether the constraint is local or not for v17 is not correct [2], it
> > sets "notnull_islocal", only if the "attislocal" is true, which seems
> > to be wrong. Because the test case given in this bug the attribute is
> > not local but it is marked not null.
>
> Ah, right, the column is indeed not local, but the constraint is. I
> think this means we need to use flagInhAttrs to require the constraint
> to be printed ... looking.
>
I think we can fix it in getTableAttrs(), see attached, with that I
can see my dump is correct. This is just a quick way to show what I
am thinking, maybe we can improve this condition. I believe
flagInhAttrs() is more about resetting the "notnull_islocal" if any of
the parent already has it as non null. This fix is working with this
basic case, but I haven't investigated whether it will work in all
cases or is it breaking anything.
After this fix the dump look like this
CREATE TABLE public.p (
a integer
);
ALTER TABLE public.p OWNER TO dilipkumarb;
--
-- Name: c; Type: TABLE; Schema: public; Owner: dilipkumarb
--
CREATE TABLE public.c (
NOT NULL a -- now after fix NOT NULL constraint is added in the dump
)
INHERITS (public.p);
--
Regards,
Dilip Kumar
Google
| Attachment | Content-Type | Size |
|---|---|---|
| dump_notnull_islocal_constraint_correctly.patch | application/octet-stream | 671 bytes |
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Andres Freund | 2025-10-06 14:20:22 | Re: Potential "AIO / io workers" inter-worker locking issue in PG18? |
| Previous Message | David Rowley | 2025-10-06 11:34:56 | Re: [BUGS] BUG #11500: PRIMARY KEY index not being used |