public inbox for [email protected]  
help / color / mirror / Atom feed
From: Tom Lane <[email protected]>
To: Yugo Nagata <[email protected]>
Cc: [email protected]
Subject: Re: EphemeralNamedRelation and materialized view
Date: Sun, 03 Nov 2024 13:42:33 -0500
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>

Yugo Nagata <[email protected]> writes:
> While looking into the commit b4da732fd64e936970f38c792f8b32c4bdf2bcd5,
> I noticed that we can create a materialized view using Ephemeral Named
> Relation in PostgreSQL 16 or earler. 

Yeah, we should reject that, but I feel like this patch is not
ambitious enough, because the 17-and-up behavior isn't exactly
polished either.

I tried variants of this function in HEAD:

1. With "create table mv as select * from enr", it works and
does what you'd expect.

2. With "create view mv as select * from enr", you get

regression=# insert into tbl values (10);
ERROR:  relation "enr" does not exist
LINE 1: create view mv as select * from enr
                                        ^
QUERY:  create view mv as select * from enr
CONTEXT:  PL/pgSQL function f() line 2 at SQL statement
regression=# \errverbose 
ERROR:  42P01: relation "enr" does not exist
LINE 1: create view mv as select * from enr
                                        ^
QUERY:  create view mv as select * from enr
CONTEXT:  PL/pgSQL function f() line 2 at SQL statement
LOCATION:  parserOpenTable, parse_relation.c:1452

3. With "create materialized view ..." you get

regression=# insert into tbl values (10);
ERROR:  executor could not find named tuplestore "enr"
CONTEXT:  SQL statement "create materialized view mv as select * from enr"
PL/pgSQL function f() line 2 at SQL statement
regression=# \errverbose 
ERROR:  XX000: executor could not find named tuplestore "enr"
CONTEXT:  SQL statement "create materialized view mv as select * from enr"
PL/pgSQL function f() line 2 at SQL statement
LOCATION:  ExecInitNamedTuplestoreScan, nodeNamedtuplestorescan.c:107

I don't think hitting an internal error is good enough.
Why doesn't this case act like case 2?

You could even argue that case 2 isn't good enough either,
and we should be delivering a specific error message saying
that an ENR can't be used in a view/matview.  To do that,
we'd likely need to pass down the QueryEnvironment in more
places not fewer.

			regards, tom lane






view thread (3+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: EphemeralNamedRelation and materialized view
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox