Re: BUG #17909: CREATE SCHEMA AUTHORIZATION sch CREATE TABLE foo ( id INT ) will coredump

Richard Guo <guofenglinux@gmail.com>

From: Richard Guo <guofenglinux@gmail.com>
To: Michael Paquier <michael@paquier.xyz>
Cc: hysong0101@163.com, pgsql-bugs@lists.postgresql.org
Date: 2023-04-27T10:28:28Z
Lists: pgsql-bugs
On Thu, Apr 27, 2023 at 5:31 PM Michael Paquier <michael@paquier.xyz> wrote:

> On Thu, Apr 27, 2023 at 04:59:13PM +0800, Richard Guo wrote:
> > In this case the CreateSchemaStmtContext.schemaname is NULL since it is
> > not explicitly specified, while the schemaname in the schema element is
> > not NULL as it is specified, and setSchemaName cannot copy with such
> > situation.  Maybe we should check against RoleSpec.rolename in this case
> > since that is also the schema's name?
>
> In this case, it is cleaner to just set the schema name in
> CreateSchemaStmtContext.schemaname to the role in the RoleSpec if there
> is no schema set in the query, because the schema name will have the
> same name as the role.  That also makes the handling of each element
> in schemaElts simpler.


I noticed that in CreateSchemaCommand there is logic that fills schema
name with the role name if it is not specified.  Do you think we can
save the new-filled schema name into CreateSchemaStmt.schemaname there?


> The regression tests cruelly lacks of checks here.  This is not a
> pattern of CREATE SCHEMA known a lot, but we should do better.


Agreed.  It's better to have a case covering this pattern of CREATE
SCHEMA.

Thanks
Richard

Commits

  1. Fix crashes with CREATE SCHEMA AUTHORIZATION and schema elements