@Don, danke für die Ausführung dieser Abfragen – du hast die Grundursache bestätigt
Deine Ergebnisse zeigen genau das, was wir vermutet haben:
Du hast ein backup-Schema mit einer Kopie von user_options.
Diese Tabelle hat immer noch den alten Standardwert (column_default = false).
Die backup-Zeile erschien vorpublic in den Abfrageergebnissen.
Als die Migration den Standardwert für public.user_options entfernte, wurde backup.user_options nicht angetastet. Dann fragte mark_readonlyinformation_schema.columns ab, ohne nach Schema zu filtern, erhielt zuerst die backup-Zeile (die immer noch den Standardwert hatte) und schlug fehl
Die Lösung besteht darin, der Abfrage einfach table_schema = 'public' hinzuzufügen, damit sie nur das Schema überprüft, auf das Migrationen tatsächlich angewendet werden.