postgresql/src/include/utils
Peter Eisentraut eec0040c4b Add support for NOT ENFORCED in foreign key constraints
This expands the NOT ENFORCED constraint flag, previously only
supported for CHECK constraints (commit ca87c415e2), to foreign key
constraints.

Normally, when a foreign key constraint is created on a table, action
and check triggers are added to maintain data integrity.  With this
patch, if a constraint is marked as NOT ENFORCED, integrity checks are
no longer required, making these triggers unnecessary.  Consequently,
when creating a NOT ENFORCED foreign key constraint, triggers will not
be created, and the constraint will be marked as NOT VALID.
Similarly, if an existing foreign key constraint is changed to NOT
ENFORCED, the associated triggers will be dropped, and the constraint
will also be marked as NOT VALID.  Conversely, if a NOT ENFORCED
foreign key constraint is changed to ENFORCED, the necessary triggers
will be created, and the will be changed to VALID by performing
necessary validation.

Since not-enforced foreign key constraints have no triggers, the
shortcut used for example in psql and pg_dump to skip looking for
foreign keys if the relation is known not to have triggers no longer
applies.  (It already didn't work for partitioned tables.)

Author: Amul Sul <sulamul@gmail.com>
Reviewed-by: Joel Jacobson <joel@compiler.org>
Reviewed-by: Andrew Dunstan <andrew@dunslane.net>
Reviewed-by: Peter Eisentraut <peter@eisentraut.org>
Reviewed-by: jian he <jian.universality@gmail.com>
Reviewed-by: Alvaro Herrera <alvherre@alvh.no-ip.org>
Reviewed-by: Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Reviewed-by: Isaac Morland <isaac.morland@gmail.com>
Reviewed-by: Alexandra Wang <alexandra.wang.oss@gmail.com>
Tested-by: Triveni N <triveni.n@enterprisedb.com>
Discussion: https://www.postgresql.org/message-id/flat/CAAJ_b962c5AcYW9KUt_R_ER5qs3fUGbe4az-SP-vuwPS-w-AGA@mail.gmail.com
2025-04-02 13:36:44 +02:00
..
.gitignore Generate automatically code and documentation related to wait events 2023-07-05 10:53:11 +09:00
acl.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
aclchk_internal.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
array.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
arrayaccess.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
ascii.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
attoptcache.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
backend_progress.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
backend_status.h Allow plugins to set a 64-bit plan identifier in PlannedStmt 2025-03-24 13:23:42 +09:00
builtins.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
bytea.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
cash.h Convert *GetDatum() and DatumGet*() macros to inline functions 2022-09-27 20:50:21 +02:00
catcache.h Fix catcache invalidation of a list entry that's being built 2025-01-14 14:28:49 +02:00
combocid.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
conffiles.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
date.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
datetime.h Seek zone abbreviations in the IANA data before timezone_abbreviations. 2025-01-16 14:11:19 -05:00
datum.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
dsa.h Get rid of our dependency on type "long" for memory size calculations. 2025-01-31 13:52:40 -05:00
dynahash.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
elog.h Add errhint_internal() 2025-03-30 16:10:51 -04:00
evtcache.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
expandeddatum.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
expandedrecord.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
float.h pg_noreturn to replace pg_attribute_noreturn() 2025-03-13 12:37:26 +01:00
fmgrtab.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
formatting.h Add SQL function CASEFOLD(). 2025-01-24 14:56:22 -08:00
freepage.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
geo_decls.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
guc.h aio: Basic subsystem initialization 2025-03-17 18:51:33 -04:00
guc_hooks.h Enable IO concurrency on all systems 2025-03-30 19:16:47 -04:00
guc_tables.h Add vacuum_truncate configuration parameter. 2025-03-20 10:16:50 -05:00
help_config.h pg_noreturn to replace pg_attribute_noreturn() 2025-03-13 12:37:26 +01:00
hsearch.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
index_selfuncs.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
inet.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
injection_point.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
inval.h Avoid invalidating all RelationSyncCache entries on publication rename. 2025-03-13 09:16:33 +05:30
json.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
jsonb.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
jsonfuncs.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
jsonpath.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
logtape.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
lsyscache.h Add some opfamily support functions to lsyscache.c 2025-03-18 11:17:43 +01:00
memdebug.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
memutils.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
memutils_internal.h pg_noreturn to replace pg_attribute_noreturn() 2025-03-13 12:37:26 +01:00
memutils_memorychunk.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
meson.build Update copyright for 2025 2025-01-01 11:21:55 -05:00
multirangetypes.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
numeric.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
palloc.h Swap order of extern/static and pg_nodiscard 2025-03-14 07:18:07 +01:00
partcache.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_crc.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_locale.h Use thread-safe strftime_l() instead of strftime(). 2025-03-28 07:13:43 +01:00
pg_lsn.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
pg_rusage.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
pgstat_internal.h Add WAL data to backend statistics 2025-03-11 09:04:11 +09:00
pgstat_kind.h Move information about pgstats kinds into its own header pgstat_kind.h 2025-01-14 12:43:07 +09:00
pidfile.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
plancache.h Doc: remove obsolete comment. 2025-03-14 14:08:47 -04:00
portal.h Don't lock partitions pruned by initial pruning 2025-02-20 17:09:48 +09:00
ps_status.h Speedup and increase usability of set proc title functions 2023-02-20 16:18:27 +13:00
queryenvironment.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
rangetypes.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
regproc.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
rel.h Add support for NOT ENFORCED in foreign key constraints 2025-04-02 13:36:44 +02:00
relcache.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
relfilenumbermap.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
relmapper.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
relptr.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
reltrigger.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
resowner.h aio: Basic subsystem initialization 2025-03-17 18:51:33 -04:00
rls.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
ruleutils.h Improve EXPLAIN's display of window functions. 2025-03-11 11:19:54 -04:00
sampling.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
selfuncs.h Use extended stats for precise estimation of bucket size in hash join 2025-03-10 13:42:01 +02:00
sharedtuplestore.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
snapmgr.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
snapshot.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
sortsupport.h Simplify and generalize PrepareSortSupportFromIndexRel() 2025-03-14 10:34:08 +01:00
spccache.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
syscache.h IWYU widely useful pragmas 2025-01-15 18:57:53 +01:00
timeout.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
timestamp.h Add connection establishment duration logging 2025-03-12 11:35:27 -04:00
tuplesort.h Allow parallel CREATE INDEX for GIN indexes 2025-03-03 16:53:06 +01:00
tuplestore.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
typcache.h Introduce a SQL-callable function array_sort(anyarray). 2025-04-01 18:03:55 -04:00
tzparser.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
usercontext.h Perform logical replication actions as the table owner. 2023-04-04 11:25:23 -04:00
uuid.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
varbit.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
varlena.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
wait_event.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
xid8.h Update copyright for 2025 2025-01-01 11:21:55 -05:00
xml.h Update copyright for 2025 2025-01-01 11:21:55 -05:00