2010-08-23 3 views
0

Après une réponse à une question précédente (request over several schema), j'essaye d'écrire une procédure stockée pour sélectionner des tables pour plusieurs schémas (chaque utilisateur a un schéma).procédure stockée postgresql avec requête sur plusieurs schémas

create or replace public.select_simulations() returns setof simulation as $$ 
declare 
    users pg_user%ROWTYPE; 
    simu simulation%ROWTYPE; 
begin 
    for users in select usename from pg_user where usename <> 'postgres' loop 
     for simu in select id, name from (users.usename).simulation loop    
      return next simu; 
     end loop; 
    end loop; 
end; 
$$ 

mais il n'accepte pas la (users.usename).simulation, et sans la parenthèse, il a produit une erreur (semble rechercher un champ sous, pas un schéma) ...

Alors, quelle est la syntaxe correcte dire que users.usename est un nom de schéma?

Nous vous remercions de votre aide!

+0

J'utilise PostgreSQL 8.1, peut-être sa matière .. –

+0

La version 8.1 sera hors service cette année, vous feriez mieux de passer à une version plus récente. PostgreSQL est devenu bien meilleur depuis novembre 2005, juste un peu de temps pour faire quelque chose pour cette version ancienne et obsolète. http://wiki.postgresql.org/wiki/PostgreSQL_Release_Support_Policy –

+0

Merci pour le conseil, je passe à la version 8.4. –

Répondre

1

Vous pouvez jeter un oeil à la pour en exécuter la structure de contrôle:

FOR record_or_row IN EXECUTE text_expression LOOP 
    statements 
END LOOP [ label ]; 

http://www.postgresql.org/docs/8.1/static/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING

Quelque chose comme:

... 

for users in select usename from pg_user where usename <> 'postgres' loop 
    for simu in execute 'select id, name from '||quote_ident(users.usename)||'.simulation' loop 
     return next simu; 
    end loop; 
end loop; 
... 
Questions connexes