From: | Peter Eisentraut <peter(at)eisentraut(dot)org> |
---|---|
To: | jian he <jian(dot)universality(at)gmail(dot)com> |
Cc: | Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, Aleksander Alekseev <aleksander(at)timescale(dot)com>, pgsql-hackers <pgsql-hackers(at)postgresql(dot)org>, Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>, vignesh C <vignesh21(at)gmail(dot)com> |
Subject: | Re: Catalog domain not-null constraints |
Date: | 2024-04-15 07:43:08 |
Message-ID: | 6192a97e-7af6-43bb-acff-fee587353407@eisentraut.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-hackers |
On 09.04.24 10:44, jian he wrote:
>> After studying this a bit more, I think moving forward in this direction
>> is the best way. Attached is a new patch version, mainly with a more
>> elaborate commit message. This patch makes the not-null constraint
>> syntax consistent between CREATE DOMAIN and ALTER DOMAIN, and also makes
>> the respective documentation correct.
>>
>> (Note that, as I show in the commit message, commit e5da0fe3c22 had in
>> passing fixed a couple of bugs in CREATE and ALTER DOMAIN, so just
>> reverting that commit wouldn't be a complete solution.)
> in ruleutils.c
> /* conkey is null for domain not-null constraints */
> appendStringInfoString(&buf, "NOT NULL VALUE");
>
> should be
>
> /* conkey is null for domain not-null constraints */
> appendStringInfoString(&buf, "NOT NULL ");
Good catch, fixed.
> currently
> src6=# \dD connotnull
> /******** QUERY *********/
> SELECT n.nspname as "Schema",
> t.typname as "Name",
> pg_catalog.format_type(t.typbasetype, t.typtypmod) as "Type",
> (SELECT c.collname FROM pg_catalog.pg_collation c, pg_catalog.pg_type bt
> WHERE c.oid = t.typcollation AND bt.oid = t.typbasetype AND
> t.typcollation <> bt.typcollation) as "Collation",
> CASE WHEN t.typnotnull THEN 'not null' END as "Nullable",
> t.typdefault as "Default",
> pg_catalog.array_to_string(ARRAY(
> SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM
> pg_catalog.pg_constraint r WHERE t.oid = r.contypid
> ), ' ') as "Check"
> FROM pg_catalog.pg_type t
> LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.typnamespace
> WHERE t.typtype = 'd'
> AND t.typname OPERATOR(pg_catalog.~) '^(connotnull)$' COLLATE
> pg_catalog.default
> AND pg_catalog.pg_type_is_visible(t.oid)
> ORDER BY 1, 2;
> /************************/
>
> ---
> Since the last column is already named as "Check", maybe we need to
> change the query to
> pg_catalog.array_to_string(ARRAY(
> SELECT pg_catalog.pg_get_constraintdef(r.oid, true) FROM
> pg_catalog.pg_constraint r WHERE t.oid = r.contypid
> and r.contype = 'c'
> ), ' ') as "Check"
>
> That means domain can be associated with check constraint and not-null
> constraint.
Yes, I changed it like you wrote.
> the url link destination is fine, but the url rendered name is "per
> the section called “Notes”" which seems strange,
> please see attached.
Hmm, changing that would be an independent project.
I have committed the patch with the two amendments you provided.
I had also added a test of \dD and that caused some test output
instability, so I added a ORDER BY r.conname to the \dD query.
From | Date | Subject | |
---|---|---|---|
Next Message | Hayato Kuroda (Fujitsu) | 2024-04-15 07:57:49 | RE: Slow catchup of 2PC (twophase) transactions on replica in LR |
Previous Message | Ashutosh Bapat | 2024-04-15 06:59:47 | Re: apply_scanjoin_target_to_paths and partitionwise join |