Fehler #415
Inkompatibilitäten mit postgres 12
100%
Beschreibung
adsrc¶
In postgres 12 wurde die Spalte pg_attrdef.adsrc entfernt, da sie schon lange als obsolet markiert war. Aus der Doku zu postgres 11:
The adsrc field is historical, and is best not used, because it does not track outside changes that might affect the representation of the default value.
In SL/Auth/ColumnInformation.pm wird diese Spalte noch ausgelesen, ich kann aber nicht sehen, wofür sie verwendet wird. Vielleicht für die CRM? Kann das weg?
Falls die Info noch benötigt wird gibt es die Funmktion pg_get_expr, diese sollte das gleiche Ergebnis liefern:
SELECT a.attname, format_type(a.atttypid, a.atttypmod) AS format_type, pg_get_expr(d.adbin,d.adrelid) as adsrc, a.attnotnull FROM pg_attribute a LEFT JOIN pg_attrdef d ON (a.attrelid = d.adrelid) AND (a.attnum = d.adnum);
Ein Unterschied ist bei den Sequencen, pg_get_expr(d.adbin,d.adrelid) liefert z.B.
nextval('auth.clients_id_seq'::regclass
während das alte adsrc
nextval('clients_id_seq'::regclass)
liefert, also ohne das Schema.
WITH OIDS¶
Außerdem hat sich das Verhalten von "WITH OIDS" verändert.
Previously, a normally-invisible oid column could be specified during table creation using WITH OIDS; that ability has been removed. Columns can still be explicitly declared as type oid. Operations on tables that have columns created using WITH OIDS will need adjustment.
The system catalogs that previously had hidden oid columns now have ordinary oid columns. Hence, SELECT * will now output those columns, whereas previously they would be displayed only if selected explicitly.
Es gibt noch ein paar wenige Fälle, wo nach oid sortiert wird, und zwar bei der Tabelle assembly, hier sollte aber nach der inzwischen existierenden Spalte "position" sortiert werden. Das Sortieren nach oid stammt wohl noch aus einer Zeit, als diverse Tabellen keine Primärschlüssel hatten.
git grep "ORDER BY.*\.oid" SL/DO.pm: qq|ORDER BY pg.partsgroup, a.oid|; SL/DO.pm: $sortorder = qq|ORDER BY a.oid|; SL/IS.pm: qq|ORDER BY pg.partsgroup, a.oid|; SL/IS.pm: $sortorder = qq|ORDER BY a.oid|; SL/OE.pm: $sortorder = qq|ORDER BY pg.partsgroup, a.oid|; SL/OE.pm: $sortorder = qq|ORDER BY a.oid|;
Dann müßten noch die Upgradeskripte angepasst werden, das betrifft mehrere Tabellen, die in sql/lx-office.sql mit WITH OIDS angelegt werden, das WITH OIDS kann/muß also weg. Und es gibt Stellen in Upgradeskripten, die alte oids migrieren (acc_trans_without_oid), ich vermute die funktionieren unter 12 auch nicht mehr.
Historie
Von Jan Büren vor mehr als 4 Jahren aktualisiert
- Zielversion wurde auf 3.6 gesetzt
- % erledigt wurde von 0 zu 100 geändert
Funktioniert mit
dd3f1958ace69
ca247333e470
und 53db54a80c97c95
1. Upgradetest -> i.O.
2. Neue DB und Mandant -> i.O.