Re: CREATE TABLE creates a composite type corresponding to the table row, which is and is not there

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: Erik Wienhold <ewie(at)ewie(dot)name>, Hannu Krosing <hannuk(at)google(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: Re: CREATE TABLE creates a composite type corresponding to the table row, which is and is not there
Date: 2024-05-16 15:47:05
Message-ID: CAKFQuwZQ2+YAerqxo4zJ0mreowBqe9T0k0KPvAaqwgvFNGOR5A@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Wed, May 15, 2024 at 8:46 AM Robert Haas <robertmhaas(at)gmail(dot)com> wrote:

> On Thu, Apr 4, 2024 at 12:41 AM Erik Wienhold <ewie(at)ewie(dot)name> wrote:
> > Thanks, fixed in v4. Looks like American English prefers that comma and
> > it's also more common in our docs.
>
> Reviewing this patch:
>
> - Creates a <firstterm>typed table</firstterm>, which takes its
> - structure from the specified composite type (name optionally
> - schema-qualified). A typed table is tied to its type; for
> - example the table will be dropped if the type is dropped
> - (with <literal>DROP TYPE ... CASCADE</literal>).
> + Creates a <firstterm>typed table</firstterm>, which takes its
> structure
> + from an existing (name optionally schema-qualified) stand-alone
> composite
> + type (i.e., created using <xref linkend="sql-createtype"/>) though
> it
> + still produces a new composite type as well. The table will have
> + a dependency on the referenced type such that cascaded alter and
> drop
> + actions on the type will propagate to the table.
>
> It would be better if this diff didn't reflow the unchanged portions
> of the paragraph.
>
> I agree that it's a good idea to mention that the table must have been
> created using CREATE TYPE .. AS here, but I disagree with the rest of
> the rewording in this hunk. I think we could just add "creating using
> CREATE TYPE" to the end of the first sentence, with an xref, and leave
> the rest as it is.

> I don't see a reason to mention that the typed
> table also spawns a rowtype; that's just standard CREATE TABLE
> behavior and not really relevant here.

I figured it wouldn't be immediately obvious that the system would create a
second type with identical structure. Of course, in order for SELECT tbl
FROM tbl; to work it must indeed do so. I'm not married to pointing out
this dynamic explicitly though.

> And I don't understand what the
> rest of the rewording does for us.
>

It calls out the explicit behavior that the table's columns can change due
to actions on the underlying type. Mentioning this unique behavior seems
worth a sentence.

> <para>
> - When a typed table is created, then the data types of the
> - columns are determined by the underlying composite type and are
> - not specified by the <literal>CREATE TABLE</literal> command.
> + A typed table always has the same column names and data types as the
> + type it is derived from, and you cannot specify additional columns.
> But the <literal>CREATE TABLE</literal> command can add defaults
> - and constraints to the table and can specify storage parameters.
> + and constraints to the table, as well as specify storage parameters.
> </para>
>
> I don't see how this is better.
>

I'll agree this is more of a stylistic change, but mainly because the talk
about data types reasonably implies the other items the patch explicitly
mentions - names and additional columns.

> - errmsg("type %s is not a composite type",
> + errmsg("type %s is not a stand-alone composite type",
>
> I agree with Peter's complaint that people aren't going to understand
> what a stand-alone composite type means when they see the revised
> error message; to really help people, we're going to need to do better
> than this, I think.
>
>
We have a glossary.

That said, leave the wording as-is and add a conditional hint: The
composite type must not also be a table.

David J.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Andrew Dunstan 2024-05-16 15:50:20 Re: First draft of PG 17 release notes
Previous Message Robert Haas 2024-05-16 15:28:47 Re: Add new protocol message to change GUCs for usage with future protocol-only GUCs