Se débarrasser des "+" dans la définition des vues

La norme SQL évolue : tirez le meilleur d'un SGBD qui la respecte en écrivant du SQL moderne avec en complément PL/pgSQL, php, java etc.
Répondre
Phil
Administrateur du site
Messages : 291
Enregistré le : mar. 1 sept. 2015 00:38
Localisation : France
Contact :

Se débarrasser des "+" dans la définition des vues

Message par Phil »

Merci à Chantal pour sa question.

J’utilise la vue pg_views pour récupérer le code des vues que je dois créer

J’ai écrit un truc du style :

select 'create or replace view '||viewname||' as '||definition from pg_views where viewname =’ act_dim_abio_microbio’;

et le résultat est ci-dessous : (je récupère le résultat dans un fichier)

Code : Tout sélectionner

create or replace view act_dim_abio_microbio as  SELECT DISTINCT act_dim_dbio.dbio_id_abio AS id,+
     first_value(                                                                                 +
         CASE                                                                                     +
             WHEN ((act_dim_dbio.dbio_code_test)::text ~~ 'germ%'::text) THEN 'oui'::text         +
             ELSE 'non'::text                                                                     +
         END) OVER (PARTITION BY act_dim_dbio.dbio_id_abio ORDER BY                               +
         CASE                                                                                     +
             WHEN ((act_dim_dbio.dbio_code_test)::text ~~ 'germ%'::text) THEN 'oui'::text         +
             ELSE 'non'::text                                                                     +
         END DESC) AS abio_microbiologie                                                          +
    FROM act_dim_dbio;
    

Existe-t-il une option pour éviter de générer les + ?


Réponse :

Ces « + » sont de l’affichage psql , ils ne viennent pas de ta requête (à noter que tu pourrais utiliser pg_get_viewdef plutôt que d’interroger directement le catalogue).

Tu peux changer comme tu veux toute l’apparence des résultats dans psql, tu peux faire du brut avec unaligned par exemple (j’ai mis en plus tuples_only pour n’avoir que les lignes et pas les entêtes de colonnes), exemple :

Code : Tout sélectionner

dh00^*> \pset format unaligned
Le format de sortie est unaligned.
dh00^*> \pset tuples_only
L'affichage des tuples seuls est activé.
dh00^*> select pg_get_viewdef('act_dim_abio_microbio'::regclass, false);
SELECT DISTINCT act_dim_dbio.dbio_id_abio AS id,
    first_value(
        CASE
            WHEN ((act_dim_dbio.dbio_code_test)::text ~~ 'germ%'::text) THEN 'oui'::text
            ELSE 'non'::text
        END) OVER (PARTITION BY act_dim_dbio.dbio_id_abio ORDER BY
        CASE
            WHEN ((act_dim_dbio.dbio_code_test)::text ~~ 'germ%'::text) THEN 'oui'::text
            ELSE 'non'::text
        END DESC) AS abio_microbiologie
   FROM act_dim_dbio;
Cdlt. Phil - pgphil.ovh
Répondre