Eine Datenbank stellt Tabelle per View einer anderen zur Verfügung

Hallo zusammen,

ich habe eine Webanwendung, die auf eine Postgres-Datenbank zugreift. Die Konfiguration ist in der Datenbank hinterlegt.
Jetzt soll die Webanwendung erweitert werden. Da das Datenmodell dies nicht vorsehen muss ich 2 Datenbanken für die 2 Tabellen unterschiedlichen Konfigurationen laufen lassen, was eine große Verschwendung ist, weil die meisten anderen Tabellen übereinstimmen.
Ich habe aber den Tipp bekommen, dass ich mir eine View auf die Tabelle erstelle und sie der anderen Datenbank zur Verfügung stellen soll, damit alle wichtigen Daten in einer Datenbank zusammenlaufen. Gibt es dafür ein Stichwort, bzw. ein Tutorial, oder hat jemand vielleicht eine Idee wie sowas realisiert werden kann in Postgres auch mit Hinblick auf Performanz?

Vielen Dank im vorraus
Richard

Du wirst keine 2 Datenbanken brauchen. Vielleicht 2 Schemas.

Ich habe aber den Tipp bekommen, dass ich mir eine View auf die Tabelle erstelle und sie der anderen Datenbank zur Verfügung stellen soll, damit alle wichtigen Daten in einer Datenbank zusammenlaufen.

Wie gesagt, Du wirst keine 2 Datenbanken wollen, höchstens 2 Schemas. Aber wahrscheinlich nicht einmal das.

Gibt es dafür ein Stichwort, bzw. ein Tutorial, oder hat jemand vielleicht eine Idee wie sowas realisiert werden kann in Postgres auch mit Hinblick auf Performanz?

Deine Frage ist sehr, sehr schwammig. Ein VIEW ist schnell erstellt: einfach ein vorhandenes SELECT vorne mit “CREATE VIEW mein_view AS” erweitern.

Ansonsten: Handbuch lesen.


Andreas

Hallo Andreas,

bei der Webanwendung kann nur eine Datenbank angegeben werden. Somit bin ich im Schema public.
Die Konfiguration befindet sich z. B. in der Tabelle conf.
Wenn ich eine 2. Webanwendung laufen lassen will muss ich wieder eine Datenbank angeben. In dieser wurde ich die Tabelle conf anpassen.
Selbst wenn es mit den Schemata klappen wuerde, haette ich immernoch das Problem, dass sich die Daten nicht in einer Haupttabelle z. B. Kunden befinden und muss sie mir zusammen suchen: Nehmen wir an ich habe europäische und amerikanische Kunden fuer die das metrische System ja anders definiert ist. Das konfiguriere ich in der conf Tabelle und habe somit 2 Portale einmal fuer die Europäer und einmal fuer die Amerikaner.
Ich moechte aber alle Kunden in einer Tabelle haben.
Ich hoffe, dass meine Problemstellung klarer geworden ist. Wenn nicht bitte fragen, ich bin fuer jeden Hinweis dankbar.

Viele Gruesse
Richard

Hallo Richard,

So wie man mit mehreren User auf ein und dieselbe Datenbank zugreifen kann, kann man das auch mit 2 Webanwendungen. Du mußt nur für jede Webanwendung einen User erstellen. In der conf-Tabelle kannst Du dann für jeden User die entsprechenden Daten hinterlegen und user-spezifisch abrufen. Ein andere Möglichkeit ist, pro User ein Schema anzulegen und dort die conf-Tabelle des Users zu erstellen. Mit GRAND kannst Du dann bestimmen, welcher User auf welche Tabellen Zugriff haben darf.



mfg

fristo

Ja, Nein.

Der Befehl ‘set search_path’ existiert, und auch ‘alter user’, mit dem man pro User diesen setzen kann.

Die Konfiguration befindet sich z. B. in der Tabelle conf.
Wenn ich eine 2. Webanwendung laufen lassen will muss ich wieder eine Datenbank angeben. In dieser wurde ich die Tabelle conf anpassen.

Nein.

Selbst wenn es mit den Schemata klappen wuerde, haette ich immernoch das Problem, dass sich die Daten nicht in einer Haupttabelle z. B. Kunden befinden und muss sie mir zusammen suchen: Nehmen wir an ich habe europäische und amerikanische Kunden fuer die das metrische System ja anders definiert ist. Das konfiguriere ich in der conf Tabelle und habe somit 2 Portale einmal fuer die Europäer und einmal fuer die Amerikaner.

Ja, und?

test=# create table kunden (id int, land text);
CREATE TABLE
Time: 113.418 ms
test=*# commit;
COMMIT
test=# insert into kunden values(1, 'ami');
INSERT 0 1
Time: 1.720 ms
test=*# insert into kunden values(2, 'deutscher');
INSERT 0 1
Time: 0.960 ms
test=*# select id, case when land='ami' then 'gallone' when land='deutscher' then 'liter' end as tankeinheit from kunden;
 id | tankeinheit
----+-------------
  1 | gallone
  2 | liter
(2 rows)

Time: 1.612 ms



Ich moechte aber alle Kunden in einer Tabelle haben.
Ich hoffe, dass meine Problemstellung klarer geworden ist. Wenn nicht bitte fragen, ich bin fuer jeden Hinweis dankbar.

Viele Gruesse
Richard

Das zu realisieren gibt es viele Wege…

Andreas