Hallo,
danke erstmal für die wertvollen Tips!
Inzwischen bin ich auch noch auf einen Lösungsansatz gestoßen. Man kann
tatsächlich in dem Connection-String folgendes ergänzen:
options=-csearch_path=tagung_2022,public
Beachte: keine Leerzeichen und Anführungszeichen.
Der beispielhaft angegebene search_path sorgt dafür, dass Tabellen erst
in dem Schema tagung_2022 und dann in Schema public gesucht werden.
Die Sache hat aber einen Haken: Das funktioniert für Listenfelder u.ä.,
wo der Listeninhalt direkt über eine SQL-Abfrage erzeugt wird. Dort kann
also sowas stehen wie
select ... from tbl_person
Aber es funktioniert nicht für die Tabellen, die Datengrundlage für
Formulare und Unterformulare sind. Dort muss nach wie vor die Tabelle
aus einer Liste von Tabellen ausgewählt werden - und diese Liste enthält
nur qualifizierte Namen, das heißt incl. Schema. Löscht man hier per
Hand das Schema vor dem Tabellenname, so findet LO die Tabelle nicht mehr.
Ob das alles auch über Views oder Abfragen funktioniert, habe ich noch
nicht ausprobiert. Ich bin aber misstrauisch, denn mit dem Formular
möchte ich ja Daten auch ändern und hinzufügen. Das geht aber in der
Regel nicht über Views oder Abfragen. Oder etwa doch?
Beste Grüße
Ulrich
Am 14.11.19 um 22:52 schrieb Ulrich Goebel:
Hallo,
ich verwende LO Base als Frontend für eine PostgreSQL Datenbank. Dabei
liegen die Tabellen in verschiedenen Schemas.
Das Setting:
------------
Ich arbeite in den Formularen viel mit Unterformularen und mit
Listenfeldern. Dort muss ich entsprechend qualifizierte Tabellennamen
für die Datenquellen usw. angeben, also etwa
schema.tabelle
Soweit, so gut. Aber die Datenbank dient als Personendatenbank für
Tagungen, die jährlich stattfinden. Entsprechend heißt es z.B.
tagung_2019.tbl_person
oder
tagung_2020.tbl_person
Bestimmte Daten vererben sich von Jahr zu Jahr, die liegen im Schema
public, d.h. es heißt für solche Fälle etwa
public.tbl_laender
Das Problem:
------------
Beim Aufsetzen der DB für das jeweils nächste Jahr müssen nun in allen
Formularen und allen Listenfeldern die Schemen-Angaben ersetzt werden.
Das ist extrem nervig und vor allem fehleranfällig.
Ein Lösungsansatz:
------------------
In PostgreSQL gibt es für eine Connection den Befehl
set search_path to tagung_2019, public;
Dann werden unqualifizierte Tabellen-Referenzen, also etwa tbl_person
erst in tagung_2022, dann in public gesucht.
Meine Frage:
------------
Nun endlich die Frage: Kann man beim Aufrufen der LO-DB dafür sorgen,
dass irgendwie der search_path gesetzt wird? Dann könnte ich sämtliche
Tabellen-Namen unqualifiziert lassen und müsste für das nächste Jahr
nur an dieser einen Stelle den Search-Pfad ändern...
Hat jemand eine Idee?
Ich arbeite mit LO 5.1.6.2 unter Linux mit dem DB Konnektor
(PostgreSQL Driver) aus dem Paket libreoffice-sdbc-postgresql. Bei den
Datenbankeigenschafte gebe ich bei den erweiterten Einstellungen eine
Zeile der Art
host=myserver.xxx port=## dbname=mydb user=myuser
an. Wäre vielleicht an dieser Stelle eine Angabe des Search-Pfad möglich?
Beste Grüße
Ulrich
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.