Salut,
En postgreSQL, j'ai une table my_table
:
1 2 3 4 5 6 7 8 9 10 | DROP SCHEMA IF EXISTS roipoussiere cascade; CREATE SCHEMA roipoussiere; CREATE TABLE roipoussiere.my_table ( id SERIAL PRIMARY KEY, x smallint, y smallint); INSERT INTO roipoussiere.my_table(x, y) VALUES (42, 42); -- [etc.] |
… à partir de laquelle je crée les vues view_a
et view_b
, qui on toutes les 2 les mêmes colonnes (mais pas le même contenu) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | DROP VIEW IF EXISTS roipoussiere.view_a CASCADE; CREATE VIEW roipoussiere.view_a AS SELECT 'view_a_' || x || '_' || y AS foo, 'Hello' AS bar, x, y FROM roipoussiere.my_table; DROP VIEW IF EXISTS roipoussiere.view_b CASCADE; CREATE VIEW roipoussiere.view_b AS SELECT 'view_b_' || '_' || x || '_' || y AS foo, 'Hello' AS bar, x, y FROM roipoussiere.my_table; |
… pour enfin créer une vue my_vue
, union de view_a
et view_b
:
1 2 3 4 | DROP VIEW IF EXISTS roipoussiere.my_view CASCADE; CREATE VIEW roipoussiere.my_view AS SELECT * FROM roipoussiere.view_a UNION ALL SELECT * FROM roipoussiere.view_b; |
Mais view_a
et view_b
ressemblent beaucoup, il y a juste quelques colonnes qui diffèrent. Donc j'aimerais éviter de recopier bêtement la création des vues comme je fais ici, mais plutôt créer view_a
, et ensuite créer view_b
à partir de celle-ci (donc sans recopier la colonne bar
, qui est identique pour les 2).
Note : Là c'est bien sur ultra-simplifié, en pratique :
- il y a 4 vues, pas 2 ;
- il y a quelques autres colonnes du type
foo
; - il y a des dizaines d'autres colonnes du type
bar
(avec des données en dur) dans chaque vue ; ma_vue
va ensuite dans une appli qui accepte uniquement les tables / vues contenant des colonnes bien définies (c'est pour ça que j'ai des données en dur dans mes vues).
+0
-0