Re: Catalog domain not-null constraints
Peter Eisentraut <peter@eisentraut.org>
From: Peter Eisentraut <peter@eisentraut.org>
To: jian he <jian.universality@gmail.com>
Cc: Dean Rasheed <dean.a.rasheed@gmail.com>,
Aleksander Alekseev <aleksander@timescale.com>,
pgsql-hackers <pgsql-hackers@postgresql.org>,
Alvaro Herrera <alvherre@alvh.no-ip.org>, vignesh C <vignesh21@gmail.com>
Date: 2024-04-15T07:43:08Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix ALTER DOMAIN NOT NULL syntax
- 9895b35cb88e 17.0 landed
-
Catalog domain not-null constraints
- e5da0fe3c22b 17.0 landed
-
Add tests for domain-related information schema views
- 9578393bc513 17.0 landed
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.