Nein ist überhaupt nicht kompliziert wenn man seinen Source Code richtig organisiert.
SQL Skripte sind Textdateien in denen SQL Befehle drin stehen.
Vereinfacht ausgedrückt:
view_1.sql
Code:
drop view if exists v_1 cascade;
create view v_1 as select * from ....;
view_2.sql
Code:
drop view if exists v_2 cascade;
create view v_2 as select * from ....;
view_3.sql
Code:
drop view if exists v_3 cascade;
create view v_3 as select * from v_1 join v_2 ....;
Dann macht man sich ein "Master Skript" welches alle in der richtigen Reihenfolge aufruft, z.B. für psql:
create_all_views.sql
Code:
\i view_1.sql
\i view_2.sql
\i view_3.sql
Unabhängig davon was Du änderst, musst Du nur "create_all_views.sql" laufen lassen:
Code:
psql -U ... -d my_db -f create_all_views.sql
Eine andere Einschränkung von Postgres mit Views ist, dass Du Tabellen die in Views verwendet werden, nicht so ohne weiteres ändern kannst. Deswegen sehen alle Skripte zur Schema Migration bei mir so aus, dass am Anfang einfach alle Views ge-dropped werden, dann laufen die Migrationen (egal was) und zum Schluss wird dann "create_all_views.sql" aufgerufen. Wenn man das alles automatisiert dann ist das auch wirklich keine echte Einschränkung mehr. Wir verwenden Liquibase, aber letztendlich ist es egal welches Tool man verwendet - eine durchdachte Verzeichnis- und Dateistruktur ist der erste Schritt dahin. Wenn man kein Tool verwendet, muss man sich immer merken, welche "Version" die Zieldatenbank hat und welche Migrationsschritte (=Skripte) dort ausgeführt werden müssen. Dann kommt es auch leicht zu Fehlern. Deswegen: automatisieren wo es nur geht.
Das geht alles aber nur wenn man diese vermaledeite GUI zur Erstellung des Datenbankschema weg lässt und alles(!) sauber über SQL Befehle in Skripten macht.
Stored procedures sind nicht dafür gedacht Resultate zurück zu liefern, dafür müsstest Du eine Funktion schreiben:
Code:
create function f_1()
returns table (....)
as
$$
select ...
from v_1
join v_2 ...
;
$$
language sql
stable
Verwenden kannst Du das mit
Aber unterm Strich ändert das nicht viel.