Project

General

Profile

Fehler #415

Inkompatibilitäten mit postgres 12

Added by G. Richardson 3 months ago. Updated 22 days ago.

Status:
Gelöst
Priority:
Normal
Assignee:
-
Target version:
Start date:
01/06/2020
Due date:
% Done:

100%

Estimated time:

Description

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.

History

#1 Updated by Jan Büren about 1 month ago

  • % Done changed from 0 to 100
  • Target version set to 3.6

Funktioniert mit
dd3f1958ace69
ca247333e470
und 53db54a80c97c95

1. Upgradetest -> i.O.
2. Neue DB und Mandant -> i.O.

#2 Updated by Jan Büren 22 days ago

  • Status changed from Neu to Gelöst

Also available in: Atom PDF