1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-11 20:28:21 +03:00

Fix pg_get_constraintdef for NOT NULL constraints on domains

We added pg_constraint rows for all not-null constraints, first for
tables and later for domains; but while the ones for tables were
reverted, the ones for domains were not.  However, we did accidentally
revert ruleutils.c support for the ones on domains in 6f8bb7c1e9,
which breaks running pg_get_constraintdef() on them.  Put that back.

This is only needed in branch 17, because we've reinstated this code in
branch master with commit 14e87ffa5c.  Add some new tests in both
branches.

I couldn't find anything else that needs de-reverting.

Reported-by: Erki Eessaar <erki.eessaar@taltech.ee>
Reviewed-by: Magnus Hagander <magnus@hagander.net>
Discussion: https://postgr.es/m/AS8PR01MB75110350415AAB8BBABBA1ECFE222@AS8PR01MB7511.eurprd01.prod.exchangelabs.com
This commit is contained in:
Álvaro Herrera
2024-11-27 13:50:27 +01:00
parent 0d884f570b
commit 09d09d4297
2 changed files with 25 additions and 0 deletions

View File

@ -743,6 +743,20 @@ update domnotnull set col1 = null; -- fails
ERROR: domain dnotnulltest does not allow null values
alter domain dnotnulltest drop not null;
update domnotnull set col1 = null;
update domnotnull set col1 = 5;
-- these constraints can also be added and removed by name
alter domain dnotnulltest add constraint dnotnulltest_notnull not null;
update domnotnull set col1 = null; -- fails
ERROR: domain dnotnulltest does not allow null values
select conname, pg_get_constraintdef(oid) from pg_constraint
where contypid = 'dnotnulltest'::regtype;
conname | pg_get_constraintdef
----------------------+----------------------
dnotnulltest_notnull | NOT NULL
(1 row)
alter domain dnotnulltest drop constraint dnotnulltest_notnull;
update domnotnull set col1 = null;
drop domain dnotnulltest cascade;
NOTICE: drop cascades to 2 other objects
DETAIL: drop cascades to column col2 of table domnotnull

View File

@ -429,6 +429,17 @@ alter domain dnotnulltest drop not null;
update domnotnull set col1 = null;
update domnotnull set col1 = 5;
-- these constraints can also be added and removed by name
alter domain dnotnulltest add constraint dnotnulltest_notnull not null;
update domnotnull set col1 = null; -- fails
select conname, pg_get_constraintdef(oid) from pg_constraint
where contypid = 'dnotnulltest'::regtype;
alter domain dnotnulltest drop constraint dnotnulltest_notnull;
update domnotnull set col1 = null;
drop domain dnotnulltest cascade;
-- Test ALTER DOMAIN .. DEFAULT ..