mirror of
https://github.com/postgres/postgres.git
synced 2025-09-08 00:47:37 +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 in6f8bb7c1e9
, 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 commit14e87ffa5c
. 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:
@@ -2499,6 +2499,11 @@ pg_get_constraintdef_worker(Oid constraintId, bool fullCommand,
|
|||||||
conForm->connoinherit ? " NO INHERIT" : "");
|
conForm->connoinherit ? " NO INHERIT" : "");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case CONSTRAINT_NOTNULL:
|
||||||
|
appendStringInfoString(&buf, "NOT NULL");
|
||||||
|
break;
|
||||||
|
|
||||||
case CONSTRAINT_TRIGGER:
|
case CONSTRAINT_TRIGGER:
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -743,6 +743,20 @@ update domnotnull set col1 = null; -- fails
|
|||||||
ERROR: domain dnotnulltest does not allow null values
|
ERROR: domain dnotnulltest does not allow null values
|
||||||
alter domain dnotnulltest drop not null;
|
alter domain dnotnulltest drop not null;
|
||||||
update domnotnull set col1 = 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;
|
drop domain dnotnulltest cascade;
|
||||||
NOTICE: drop cascades to 2 other objects
|
NOTICE: drop cascades to 2 other objects
|
||||||
DETAIL: drop cascades to column col2 of table domnotnull
|
DETAIL: drop cascades to column col2 of table domnotnull
|
||||||
|
@@ -429,6 +429,17 @@ alter domain dnotnulltest drop not null;
|
|||||||
|
|
||||||
update domnotnull set col1 = 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;
|
drop domain dnotnulltest cascade;
|
||||||
|
|
||||||
-- Test ALTER DOMAIN .. DEFAULT ..
|
-- Test ALTER DOMAIN .. DEFAULT ..
|
||||||
|
Reference in New Issue
Block a user