Don't try to re-order the subcommands of CREATE SCHEMA.
Tom Lane <tgl@sss.pgh.pa.us>
Don't try to re-order the subcommands of CREATE SCHEMA. transformCreateSchemaStmtElements has always believed that it is supposed to re-order the subcommands of CREATE SCHEMA into a safe execution order. However, it is nowhere near being capable of doing that correctly. Nor is there reason to think that it ever will be, or that that is a well-defined requirement. (The SQL standard does say that it should be possible to do foreign-key forward references within CREATE SCHEMA, but it's not clear that the text requires anything more than that.) Moreover, the problem will get worse as we add more subcommand types. Let's just drop the whole idea and execute the commands in the order given, which seems like a much less astonishment-prone definition anyway. The foreign-key issue will be handled in a follow-up patch. This will result in a release-note-worthy incompatibility, which is that forward references like CREATE SCHEMA myschema CREATE VIEW myview AS SELECT * FROM mytable CREATE TABLE mytable (...); used to work and no longer will. Considering how many closely related variants never worked, this isn't much of a loss. Along the way, pass down a ParseState so that we can provide an error cursor for "wrong schema name" and related errors, and fix transformCreateSchemaStmtElements so that it doesn't scribble on the parsetree passed to it. Author: Tom Lane <tgl@sss.pgh.pa.us> Reviewed-by: Kirill Reshke <reshkekirill@gmail.com> Reviewed-by: Jian He <jian.universality@gmail.com> Discussion: https://postgr.es/m/1075425.1732993688@sss.pgh.pa.us
Files
| Path | Change | +/− |
|---|---|---|
| doc/src/sgml/ref/create_schema.sgml | modified | +11 −6 |
| src/backend/commands/extension.c | modified | +5 −2 |
| src/backend/commands/schemacmds.c | modified | +7 −7 |
| src/backend/parser/parse_utilcmd.c | modified | +53 −79 |
| src/backend/tcop/utility.c | modified | +2 −2 |
| src/include/commands/schemacmds.h | modified | +3 −4 |
| src/include/parser/parse_utilcmd.h | modified | +2 −1 |
| src/test/regress/expected/create_schema.out | modified | +37 −0 |
| src/test/regress/expected/create_view.out | modified | +2 −0 |
| src/test/regress/expected/event_trigger.out | modified | +1 −1 |
| src/test/regress/expected/namespace.out | modified | +5 −4 |
| src/test/regress/sql/create_schema.sql | modified | +5 −0 |
| src/test/regress/sql/namespace.sql | modified | +6 −5 |
| src/tools/pgindent/typedefs.list | modified | +0 −1 |
Discussion
- CREATE SCHEMA ... CREATE DOMAIN support 43 messages · 2024-11-12 → 2026-04-06