仅导出Postgres中的视图

Psy*_*che 9 postgresql

有没有办法只从Postgres架构导出视图?

我正在使用Postgres 8.4.

谢谢.

ara*_*nid 19

没有直接的标志可以做到这一点,但使用我们最喜欢的查询 - 模式生成命令技术:

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');
Run Code Online (Sandbox Code Playgroud)

这将生成一个可以与pg_dump命令一起使用的字符串,例如:

 -t media.duplicated_component -t adv.advert_view_distribution 
Run Code Online (Sandbox Code Playgroud)

然后您可以直接拼接到命令行:

pg_dump $(psql -c "select string_agg(...etc...)" db) db
Run Code Online (Sandbox Code Playgroud)

  • 如果要添加实体化视图,请使用`relkind in('v','m')`. (2认同)
  • Stil适用于PostgreSQL版本9.4. (2认同)

Jan*_*rek 6

如果您的每个视图都以某个前缀为前缀,则可以使用以下命令:

pg_dump -s -t 'prefix*' dbname > db.dump
Run Code Online (Sandbox Code Playgroud)

或者你可以使用-t切换尽可能多的视图名称...请参阅pg_dump的联机帮助页,最后是示例...

  • 请注意,这会导出视图,而不是视图返回的数据.这对大多数人来说可能是显而易见的,但起初并不适合我.要导出视图返回的数据,请参阅http://stackoverflow.com/questions/1745105/postgres-dump-of-only-parts-of-tables-for-a-dev-snapshot (4认同)