details:   https://code.tryton.org/tryton/commit/f248035f0c2a
branch:    8.0
user:      Cédric Krier <[email protected]>
date:      Wed Sep 02 11:43:46 2026 +0200
description:
        Store delete rule of column per constraint

        If a column is used for different foreign keys with different delete 
rules, the
        foreign key may be recreated if the last rule stored is different.

        Closes #15053
        (grafted from 636865d7fc72d5e59d9a7bb447de8b87743cc5ad)
diffstat:

 trytond/trytond/backend/postgresql/table.py |  7 ++++---
 1 files changed, 4 insertions(+), 3 deletions(-)

diffs (30 lines):

diff -r 31477c726809 -r f248035f0c2a trytond/trytond/backend/postgresql/table.py
--- a/trytond/trytond/backend/postgresql/table.py       Thu Sep 10 08:20:15 
2026 +0200
+++ b/trytond/trytond/backend/postgresql/table.py       Wed Sep 02 11:43:46 
2026 +0200
@@ -243,14 +243,15 @@
     def _fk_deltypes(self):
         if self.__fk_deltypes is None:
             cursor = Transaction().connection.cursor()
-            cursor.execute('SELECT k.column_name, r.delete_rule '
+            cursor.execute(
+                'SELECT k.constraint_name, k.column_name, r.delete_rule '
                 'FROM information_schema.key_column_usage AS k '
                 'JOIN information_schema.referential_constraints AS r '
                 'ON r.constraint_schema = k.constraint_schema '
                 'AND r.constraint_name = k.constraint_name '
                 'WHERE k.table_name = %s AND k.table_schema = %s',
                 (self.table_name, self.table_schema))
-            self.__fk_deltypes = dict(cursor)
+            self.__fk_deltypes = {r[:2]: r[2] for r in cursor}
         return self.__fk_deltypes
 
     @property
@@ -430,7 +431,7 @@
             + ref_columns_name + '_fkey')
         if name in self._constraints:
             for column_name in columns:
-                if self._fk_deltypes.get(column_name) != on_delete:
+                if self._fk_deltypes.get((name, column_name)) != on_delete:
                     self.drop_fk(columns, ref_columns)
                     add = True
                     break

Reply via email to