2011-12-12 12 views

Odpowiedz

4

Jeśli masz każdy widok poprzedzony prefiksem pewnego, można użyć polecenia:

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

lub użyć -t włączyć jak najwięcej z nazwami widoków ... Zobacz stronę podręcznika dla pg_dump, na koniec są przykładami ...

+4

Należy zauważyć, że eksportuje widoki, a nie dane zwracane przez widoki. Jest to prawdopodobnie oczywiste dla większości, ale nie było to dla mnie na początku. Aby wyeksportować dane zwrócone przez widok, zobacz http://stackoverflow.com/questions/1745105/postgres-dump-of-only-parts-of-tables-for-a-dev-snapshot –

+0

Prawdopodobnie preferowałbyś upuszczenie '-s' i nadal używa' pg_dump', zamiast iść w dół trasy 'COPY' omawianej w tym pytaniu – kez

15

Nie ma bezpośredni flag, aby to zrobić, ale przy naszym ulubionym zapytań-the-schemat-to-generate-a-polecenia technika:

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'); 

To będzie generować ciąg znaków, który może być używany z pg_dump poleceń, np:

-t media.duplicated_component -t adv.advert_view_distribution 

które można następnie splatać w wierszu poleceń bezpośrednio:

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

Jeśli chcesz dodać widok zmaterializowany, użyj 'relkind in ('v', 'm')'. – Nobu

+0

Stil działa dobrze z wersją PostgreSQL 9.4. – mivk