Re: CREATE SCHEMA ... CREATE DOMAIN support

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Noah Misch <noah(at)leadboat(dot)com>
Cc: jian he <jian(dot)universality(at)gmail(dot)com>, Kirill Reshke <reshkekirill(at)gmail(dot)com>, Peter Eisentraut <peter(at)eisentraut(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: CREATE SCHEMA ... CREATE DOMAIN support
Date: 2026-09-04 14:21:52
Message-ID: 1566169.1788531712@sss.pgh.pa.us
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

Noah Misch <noah(at)leadboat(dot)com> writes:
> On Thu, Sep 03, 2026 at 09:00:26PM -0400, Tom Lane wrote:
>> This is not about that, it is about a9c350d's specific intent "Don't
>> try to re-order the subcommands of CREATE SCHEMA". That is, we
>> rejected the idea of allowing forward references between CREATE SCHEMA
>> subcommands, therefore myview will not bind to a CREATE TABLE
>> subcommand that comes after it.

> I'm not saying that I want the server to reorder the commands or that I know
> of a standard requiring reorder. I'm fine requiring the user to order things
> for us. The syntax rule I cited[1] appears to require my original example to
> have the same name resolution as this variant w/ more schema qualifications:

> CREATE TABLE public.mytable (c int);
> CREATE SCHEMA myschema
> CREATE VIEW myschema.myview AS SELECT * FROM myschema.mytable
> CREATE TABLE myschema.mytable (c int);
> SET search_path = pg_catalog;
> \d+ myschema.myview
> RESET search_path;

> That succeeds in v18 and fails in v19, which is fine. The problem is that my
> original example (with less schema qualification) succeeds in both versions
> with different meaning, and the v19 meaning is not standard-compliant.

What would you have us do differently?

As near as I can tell, the spec's wording is untenable anyway: it
appears to say that names within a CREATE SCHEMA can never refer to
objects outside the new schema unless explicitly schema-qualified.
Half a moment's thought shows that that's unworkable for Postgres:

CREATE SCHEMA s1
CREATE TABLE t1 (f1 int)
CREATE VIEW v1 AS SELECT abs(f1) AS a, f1 + 1 AS b FROM t1;

With that interpretation, both this reference to pg_catalog.abs()
and this reference to operator(pg_catalog.+) must fail. I don't
think anyone's going to consider that behavior better. But as
soon as you admit that "oh, pg_catalog must be implicitly in the
search path too", you might as well admit that our existing behavior
where the whole search_path is implicitly available is okay.

>> Hmm, that one seems like a genuine bug to me; why do you think it
>> shouldn't be acted on?

> It's genuine, but the combination involved is rare enough that I'd shelve it
> so long as we're not in a post-scarcity world. No objection if someone wants
> to pursue it.

Fair enough. I'll try to make some time for it, but not urgently.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Etsuro Fujita 2026-09-04 14:25:26 Re: Further cleanup related to statistics import support in postgres_fdw
Previous Message Vitaly Davydov 2026-09-04 14:15:58 Re: Deadlock detector fails to activate on a hot standby replica