转储PostgreSQL数据库时排除函数定义

dan*_*dan 4 postgresql dump database-schema

我有一个PostgreSQL数据库,其中加载了PostGIS功能.我想转储数据库的模式,但pg_dump -s转储函数以及表定义.

有没有办法排除函数,只是转储表定义?

Erw*_*ter 6

据我所知,pg_dump并且pg_dumpall不支持任何这样的限制.

可以将所有函数移动到可以从转储中排除的专用模式,如下所示:

pg_dump mydb -N function_schema > mydump.sql
Run Code Online (Sandbox Code Playgroud)

如果你走这条路,你可以将函数迁移到另一个模式,如下所示:

ALTER FUNCTION myfunc() SET SCHEMA function_schema;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我也会调整search_pathin postgresql.conf(并可能在数据库和角色的默认值中)

SET search_path = public,function_schema [,more schemas]
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以将函数保留在其默认架构中,public而不是将该架构用于其他任何架构.将对象放在一个或多个单独的模式中.这应该使升级PostGis更容易.

一般来说,不要public在对象中使用模式是个好主意.我通常会为PostGis或public默认安装的其他扩展程序保留它.我喜欢为每个应用程序使用专用模式.使维护更容易 - 包括备份和授予权限.

  • 或者,您可以使用 pg_restore 的 --list 相关选项并从生成的列表中手动修剪项目。 (2认同)