Projekt

Allgemein

Profil

Fehler #415

Inkompatibilitäten mit postgres 12

Von G. Richardson vor fast 5 Jahren hinzugefügt. Vor mehr als 4 Jahren aktualisiert.

Status:
Gelöst
Priorität:
Normal
Zugewiesen an:
-
Zielversion:
Beginn:
06.01.2020
Abgabedatum:
% erledigt:

100%

Geschätzter Aufwand:

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

#1

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.

#2

Von Jan Büren vor mehr als 4 Jahren aktualisiert

  • Status wurde von Neu zu Gelöst geändert

Auch abrufbar als: Atom PDF