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