On Thu, May 28, 2020 at 3:06 PM Amit Langote <amitlangot...@gmail.com>
wrote:

> On Thu, May 28, 2020 at 1:36 PM amul sul <sula...@gmail.com> wrote:
> > On Wed, May 27, 2020 at 12:53 PM Amit Langote <amitlangot...@gmail.com>
> wrote:
> >> Actually, if you declare the cursor without FOR SHARE/UPDATE, the case
> >> would fail even with traditional inheritance:
> >>
> >> drop table if exists p cascade;
> >> create table p (a int);
> >> create table c (check (a = 2)) inherits (p);
> >> insert into p values (1);
> >> insert into c values (2);
> >> begin;
> >> declare c cursor for select * from p where a = 1;
> >> fetch c;
> >> update p set a = a where current of c;
> >> ERROR:  cursor "c" is not a simply updatable scan of table "c"
> >> ROLLBACK
> >>
> >
> > I am not sure I understood the point, you'll see the same error with
> declarative
> > partitioning as well.
>
> My point is that if a table is not present in the cursor's plan, there
> is no way for CURRENT OF to access it.  Giving an error in that case
> seems justified.
>
> OTOH, when the CURRENT OF implementation has RowMarks to look at, it
> avoids the error for traditional inheritance children due their
> inactive RowMarks being present in the cursor's PlannedStmt.  I think
> that's only by accident though.
>

Yeah, make sense, thank you.

Regards,
Amul

Reply via email to