2011-07-29 5 views
2

Lors de l'exécution de rake db: schema: dump sur une application utilisant un schéma postgres (c'est-à-dire nom_schéma.users), il semble que seules les tables du premier schéma se trouvent dans le chemin de recherche de l'utilisateur. Existe-t-il un moyen d'inclure des tables de plusieurs schémas?Inclure plus d'un schéma postgres dans rake db: schema: dump?

Pour poser le problème différemment:

createdb myapp 

psql myapp -U postgres -c "create table stuff" 
#=> creates table "stuff" in the public schema 

psql myapp -U postgres -c "create schema specific_thing" 

psql myapp -U postgres -c 'create table "specific_thing".users(id int)' 

createuser -U postgres -S -D -R special_user 

psql myapp -U postgres -c "grant all on schema specific_thing to special_user" 

psql myapp -U postgres -c "ALTER USER special_user SET search_path TO specific_thing,public" 

Dans database.yml:

... 

development: 
    adapter: postgresql 
    database: stuff 
    username: special_user 
    password: 
    host: localhost 

... 

Course à pied: rake db:schema:dump

décharges Seuls les users talbe du schéma specific_thing et ne tient pas compte de tout dans le schéma public.

Répondre

1

Alors voici ce que j'ai trouvé. Je n'ai pas le code en face de moi, donc je ne peux pas pointer vers quoi que ce soit spécifiquement, mais il y a du code dans PostgresAdapter qui identifie ce que l'adaptateur considère comme ses 'tables' disponibles. L'adaptateur suppose qu'il traitera toujours le schéma public (le public est codé en dur dans la requête qui reçoit une liste de tables), donc ma solution au problème impliquait de sous-classer PostgresAdapter pour avoir un concept différent de ce que sont les 'tables' sont. Cela m'a le plus souvent amené. Il y avait d'autres obstacles à surmonter, mais tout était beaucoup plus clair après l'ajustement de cette pièce dans le puzzle. Certainement impliqué de passer un certain temps dans la source Rails cependant.

+0

Avez-vous pu vider plusieurs schémas? –

Questions connexes