agora inbox for pgsql-committers@postgresql.org  
help / color / mirror / Atom feed
From: Tom Lane <tgl@sss.pgh.pa.us>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Execute foreign key constraints in CREATE SCHEMA at the end.
Date: Mon, 06 Apr 2026 19:16:37 +0000
Message-ID: <E1w9pR6-003HJQ-2p@gemulon.postgresql.org> (raw)

Execute foreign key constraints in CREATE SCHEMA at the end.

The previous patch simplified CREATE SCHEMA's behavior to "execute all
subcommands in the order they are written".  However, that's a bit too
simple, as the spec clearly requires forward references in foreign key
constraint clauses to work, see feature F311-01.  (Most other SQL
implementations seem to read more into the spec than that, but it's
not clear that there's justification for more in the text, and this is
the only case that doesn't introduce unresolvable issues.)  We never
implemented that before, but let's do so now.

To fix it, transform FOREIGN KEY clauses into ALTER TABLE ... ADD
FOREIGN KEY commands and append them to the end of the CREATE SCHEMA's
subcommand list.  This works because the foreign key constraints are
independent and don't affect any other DDL that might be in CREATE
SCHEMA.  For simplicity, we do this for all FOREIGN KEY clauses even
if they would have worked where they were.

Author: Jian He <jian.universality@gmail.com>
Co-authored-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/1075425.1732993688@sss.pgh.pa.us

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/404db8f9edbb291bcc31542d488fb20f6a965798

Modified Files
--------------
doc/src/sgml/ref/create_schema.sgml                |   3 +
src/backend/parser/parse_utilcmd.c                 | 219 ++++++++++++++++++---
.../test_ddl_deparse/expected/create_schema.out    |  25 +++
.../modules/test_ddl_deparse/sql/create_schema.sql |  11 ++
src/test/regress/expected/create_schema.out        |  46 +++++
src/test/regress/expected/event_trigger.out        |   2 +-
src/test/regress/sql/create_schema.sql             |  27 +++
7 files changed, 310 insertions(+), 23 deletions(-)



Message-ID: <E1w9pR6-003HJQ-2p@gemulon.postgresql.org>
Permalink:  ../E1w9pR6-003HJQ-2p@gemulon.postgresql.org/
Also on:    postgresql.org/message-id/E1w9pR6-003HJQ-2p@gemulon.postgresql.org

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: pgsql-committers@postgresql.org
  Cc: tgl@sss.pgh.pa.us, pgsql-committers@lists.postgresql.org
  Subject: Re: pgsql: Execute foreign key constraints in CREATE SCHEMA at the end.
  In-Reply-To: <E1w9pR6-003HJQ-2p@gemulon.postgresql.org>

* 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