-
- Downloads
Fix up foreign-key mechanism so that there is a sound semantic basis for the
equality checks it applies, instead of a random dependence on whatever operators might be named "=". The equality operators will now be selected from the opfamily of the unique index that the FK constraint depends on to enforce uniqueness of the referenced columns; therefore they are certain to be consistent with that index's notion of equality. Among other things this should fix the problem noted awhile back that pg_dump may fail for foreign-key constraints on user-defined types when the required operators aren't in the search path. This also means that the former warning condition about "foreign key constraint will require costly sequential scans" is gone: if the comparison condition isn't indexable then we'll reject the constraint entirely. All per past discussions. Along the way, make the RI triggers look into pg_constraint for their information, instead of using pg_trigger.tgargs; and get rid of the always error-prone fixed-size string buffers in ri_triggers.c in favor of building up the RI queries in StringInfo buffers. initdb forced due to columns added to pg_constraint and pg_trigger.
Showing
- doc/src/sgml/catalogs.sgml 49 additions, 9 deletionsdoc/src/sgml/catalogs.sgml
- doc/src/sgml/trigger.sgml 2 additions, 1 deletiondoc/src/sgml/trigger.sgml
- src/backend/catalog/aclchk.c 2 additions, 2 deletionssrc/backend/catalog/aclchk.c
- src/backend/catalog/dependency.c 10 additions, 24 deletionssrc/backend/catalog/dependency.c
- src/backend/catalog/heap.c 4 additions, 1 deletionsrc/backend/catalog/heap.c
- src/backend/catalog/index.c 4 additions, 1 deletionsrc/backend/catalog/index.c
- src/backend/catalog/namespace.c 2 additions, 2 deletionssrc/backend/catalog/namespace.c
- src/backend/catalog/pg_constraint.c 80 additions, 108 deletionssrc/backend/catalog/pg_constraint.c
- src/backend/catalog/pg_conversion.c 3 additions, 3 deletionssrc/backend/catalog/pg_conversion.c
- src/backend/commands/conversioncmds.c 3 additions, 3 deletionssrc/backend/commands/conversioncmds.c
- src/backend/commands/explain.c 3 additions, 3 deletionssrc/backend/commands/explain.c
- src/backend/commands/tablecmds.c 130 additions, 433 deletionssrc/backend/commands/tablecmds.c
- src/backend/commands/trigger.c 53 additions, 72 deletionssrc/backend/commands/trigger.c
- src/backend/commands/typecmds.c 4 additions, 1 deletionsrc/backend/commands/typecmds.c
- src/backend/tcop/utility.c 2 additions, 2 deletionssrc/backend/tcop/utility.c
- src/backend/utils/adt/ri_triggers.c 1013 additions, 759 deletionssrc/backend/utils/adt/ri_triggers.c
- src/backend/utils/adt/ruleutils.c 16 additions, 32 deletionssrc/backend/utils/adt/ruleutils.c
- src/backend/utils/cache/lsyscache.c 31 additions, 3 deletionssrc/backend/utils/cache/lsyscache.c
- src/backend/utils/cache/syscache.c 15 additions, 2 deletionssrc/backend/utils/cache/syscache.c
- src/bin/pg_dump/pg_dump.c 21 additions, 2 deletionssrc/bin/pg_dump/pg_dump.c
Loading
Please register or sign in to comment