Kann man die DB-Collation beim Upsize angeben?

Hier dreht es sich um den PostGre Server

Moderator: Moderatoren

Antworten
Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Di, 22. Sep 2020 15:40

Damit String-Indexe sich so wie gewohnt verhalten (z.B., dass Leerzeichen vor Ziffern in der Reihenfolge stehen und nicht andersrum), muss die Postgres-Datenbank mit Collation "C.UTF-8" statt dem Default (z.B. "de_DE.UTF-8") angelegt werden.

Weißt jemand, ob dies irgendwie in der Upsize-datei festgelegt werden kann?
Viele Grüße,
David

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Di, 22. Sep 2020 16:12

Das ist eher eine Einstellung im Server. Geh mal in PgAdmin auf die Properties Deiner Datenbank, da gibt es den Bereich "Definition", in dem Du Encoding, Collation und Character Type einstellen kannst.
Herzlich,
Tom

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 8:59

Hallo Tom,
ach, wenn es so einfach wäre!
Die Collation lässt sich aber dort nur anzeigen, nicht ändern.
Wenn eine Postgres-Datenbank angelegt wird, kann die Collation angegeben werden, aber danach ist sie für alle Zeiten festgelegt.
Derzeit kann ich das Problem nur umgehen in dem ich das Upsize machen, dann ein Backup, eine neue Datenbank mit der richtigen Collation anlege, das Backup dort einspiele und schließlich die "geupsizete" Datenbank lösche.
Wenn Upsize erlauben würde, die Collation anzugeben (oder vielleicht eine existierende, leere Datenbank zu benutzen anstatt eine neue anzugeben), dann bliebe mir das mit dem Backup erspart.
Trotzdem Danke für Deine Antwort!
Viele Grüße,
David

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 9:01

...anstatt eine neue anzulegen...
Viele Grüße,
David

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Mi, 23. Sep 2020 9:10

Ja, man kann das nur beim Anlegen der Datenbank machen, und auch nur im Server selbst. Von außen habe ich noch keinen Weg gefunden.
Herzlich,
Tom

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 9:23

Ich habe vor eine Weile unseren Mitarbeiter, der derzeit die Rolle des Systemadministrators spielen muss, darum gebeten, die Default-Einstellung für Collation in der Postgres-Server-Installation zu ändern.
Leider hat er das nicht hingekriegt, obwohl er viel mehr von Linux versteht als ich.
Es bleibt mir wahrscheinlich nur übrig, Alaska zu fragen, ob vielleicht doch Upsize mehr kann als dokumentiert, oder bei dem Backup-Workaround zu bleiben.
Viele Grüße,
David

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Mi, 23. Sep 2020 9:31

Oh, da interessiert mich die Antwort auch! :)
Herzlich,
Tom

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Mi, 23. Sep 2020 10:17

Folgende Dinge sollten auch irgendwo erwähnt werden:

- DBFs, die durch das Upsizing gehen sollen, dürfen keine Feldnamen enthalten, die SQL-Keywords sind (ich bin z.B. bei "AS" und "DO" gestolpert).
- DBFs, die durch das Upsizing gehen sollen, sollten ausschließlich Dateinamen haben, die mit Buchstaben beginnen. Ziffern und Sonderzeichen killen das Upsizing.

Der IUpsizeLogger könnte auch mal dokumentiert werden, ich habe mir zwei Klassen drumherum gebaut, aber wirklich transparent ist nicht, was der macht (etwa die Methode 'Progress'). Das gilt auch für die möglichen Meldungen von DbfUpsize(), die es, soweit ich das beurteilen kann, nur auf englisch gibt.
Herzlich,
Tom

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 10:29

Ja, ich bin über USER als Tabellenname und Feldname gestolpert.
Dafür habe ich aber Verständnis - ich möchte eigentlich lieber keine SQL-Keywords als Namen benutzen, selbst wenn es vielleicht mit Hochkommas theoretisch möglich wäre.
Es kostete zwar Arbeit, USER in BENUTZER zu ändern, ist aber sauberer.
Viele Grüße,
David

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 10:31

...und mit englischen Meldungen kann ich auch gut leben. :wink:
Viele Grüße,
David

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Mi, 23. Sep 2020 10:36

Es gibt ja die Möglichkeit, beim Upsizing die Feldnamen zu wechseln (deferred/rename), wenn man das weiß. Das machen wir auch. Und obwohl Alaska davon abrät, DBF weiter zu unterstützen, wenn man die PGDBE im ISAM-Modus verwendet, tun wir das - und unterstützen dann die übersetzten und die alten Feldnamen. Ist ein bisschen Arbeit, funzt aber.
Herzlich,
Tom

Benutzeravatar
Tom
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 8197
Registriert: Do, 22. Sep 2005 23:11
Wohnort: Berlin
Hat sich bedankt: 7 Mal
Danksagung erhalten: 28 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von Tom » Mi, 23. Sep 2020 10:37

..und mit englischen Meldungen kann ich auch gut leben.
Wir übersetzen im Logger. Manch ein Kunde oder Kunden-ITler macht das selbst.
Herzlich,
Tom

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Mi, 23. Sep 2020 10:54

Sorry Tom, da es bei mir nur um ein internes IT-System und kein Verkaufsprodukt handelt, habe ich das Problem mit den Meldungen nicht, aber jetzt verstehe ich warum es für Dich relevant ist.
Viele Grüße,
David

Benutzeravatar
dtmackenzie
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 114
Registriert: Do, 22. Nov 2007 9:02
Wohnort: Leipzig
Danksagung erhalten: 1 Mal
Kontaktdaten:

Re: Kann man die DB-Collation beim Upsize angeben?

Beitrag von dtmackenzie » Fr, 25. Sep 2020 15:43

Alaska Support hat wie folgt geantwortet:

Leider unterstützt die PGDBE die Angabe einer Collation aktuell noch nicht. Die Möglichkeit, die gewünschte Collation pro Index vorgeben zu können, steht aber bereits auf unserem Plan!

Als Work-Around für das Backup-Thema lässt sich eventuell ein Postgres-Feature nutzen; SQL-Indexe "erben" nämlich die Collation von der zugeordneten Column. Per default ist das die Collation der Datenbank. Es könnte aber auch mit Hilfe eines ALTER TABLE ALTER COLUMN .. COLLATION ..-Statements eine andere sein. Mit anderen Worten: die Collation der Index-Column könnte mit Hilfe eines ALTER TABLE-Statements nachträglich geändert werden und der Index würde diese Einstellung nach einem DROP/Re-Create erben. Dies könnte auch mit Hilfe von dacSQLStatement aus der Anwendung heraus funktionieren. Vielleicht hilft Ihnen das weiter?


Die Lösung ist nicht ganz das was ich suche (s. unten), könnte aber für anderen nützlich sein.
Ich habe wie folgt geantwortet:

Das ist schon eine interessante Variante, und könnte in Prinzip hilfreich sein, Danke.
Allerdings werde ich wahrscheinlich doch beim Backup/Restore bleiben, da ich konsequent überall bei der gleichen Collation bleiben will.
Ist mir schon lieber auf (SQL) Datenbankebene und nicht pro Index, sonst besteht die Gefahr, dass ich dies irgendwann für eine neue Tabelle/Index vergesse.

Vielleicht könnten Sie in einer zukünftigen Version erlauben, dass die Parameter für dbcreate als weiteres Attribut vom Element <connection> in der Upsize-Datei angegeben werden könnten?


Alaska Support hat dann meine Anmerkung bezüglich des zusätzlichen Upsizing-Attributes an die Entwicklung weitergeleitet.
Viele Grüße,
David

Antworten