2011-12-12 13 views

risposta

4

Se si dispone di ogni vista prefisso certo prefisso, è possibile utilizzare questo comando:

pg_dump -s -t 'prefix*' dbname > db.dump 

oppure è possibile utilizzare -t passare il maggior numero possibile di punti di vista con i nomi ... Vedere pagina di manuale di pg_dump, alla fine sono esempi ...

+4

Si noti che questo esporta le viste, non i dati restituiti dalle viste. Questo è probabilmente ovvio per la maggior parte, ma non era per me all'inizio. Per esportare i dati restituiti da una vista, consulta http://stackoverflow.com/questions/1745105/postgres-dump-of-only-parts-of-tables-for-a-dev-snapshot –

+0

Probabilmente preferisci lasciar cadere il '-s' e ancora usando' pg_dump', invece di scendere la rotta 'COPY' discussa su quella domanda – kez

15

Non c'è nessuna bandiera diretta per fare questo, ma utilizzando il nostro preferito di query-the-schema-to-generate-a-comando di tecnica:

select string_agg('-t ' || quote_ident(nspname) || '.' || quote_ident(relname), ' ') 
    from pg_class join pg_namespace on pg_namespace.oid = pg_class.relnamespace 
    where relkind = 'v' and not (nspname ~ '^pg_' or nspname = 'information_schema'); 

Questo genererà una stringa che può essere utilizzato con un pg_dump comando, per esempio:

-t media.duplicated_component -t adv.advert_view_distribution 

che si poteva poi unire in una linea di comando direttamente:

pg_dump $(psql -c "select string_agg(...etc...)" db) db 
+0

Se si desidera aggiungere una vista materializzata, usare 'relkind in ('v', 'm')'. – Nobu

+0

Stil funziona bene con PostgreSQL versione 9.4. – mivk