【问题标题】:Exclude function definitions when dumping a PostgreSQL database转储 PostgreSQL 数据库时排除函数定义
【发布时间】:2012-03-26 11:49:52
【问题描述】:

我有一个 PostgreSQL 数据库,其中加载了 PostGIS 函数。我想转储数据库的架构,但pg_dump -s 将函数连同表定义一起转储。

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

【问题讨论】:

    标签: postgresql database-schema dump


    【解决方案1】:

    据我所知,pg_dumppg_dumpall 不支持任何此类限制。

    可以将所有函数移动到一个专用架构,您可以像这样从转储中排除:

    pg_dump mydb -N function_schema > mydump.sql
    

    如果你走那条路,你可以像这样migrate functions to another schema

    ALTER FUNCTION myfunc() SET SCHEMA function_schema;
    

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

    SET search_path = public,function_schema [,more schemas]
    

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

    为您的对象使用public 架构可能是个好主意。我通常为 PostGis 或默认安装到 public 的其他扩展保留它。我喜欢为每个应用程序使用专用模式。使维护更容易 - 包括备份和授予权限。

    【讨论】:

    • 或者,您可以使用 pg_restore 的 --list 相关选项并从生成的列表中手动修剪项目。
    • 如果您在恢复 PostGIS DB 的旧转储后遇到重复功能问题,您可以调查 PostGIS postgis.net/docs/postgis_installation.html#upgrading 的升级选择。
    猜你喜欢
    • 2011-01-13
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    相关资源
    最近更新 更多