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

标签 postgresql database-schema dump

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

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

最佳答案

据我所知,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 架构可能是个好主意。我通常将其保留给默认安装到 public 中的 PostGis 或其他扩展。我喜欢为每个应用程序使用专用模式。使维护更容易 - 包括备份和授予权限。

关于postgresql - 转储 PostgreSQL 数据库时排除函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9627095/

相关文章:

laravel-4 - 模式生成器 Laravel 迁移在两列上是唯一的

mysqldump 提示密码,即使凭据保存在/home/user/.my.cnf

sql - 在多行逗号之间分布表达式

sql - 文本字段中的多个字符串替换

python - 如何将 Pandas NaT 日期时间值正确插入到我的 postgresql 表中

git : what does mean "to dump"?

jvm - 如何获取Java8 Metaspace转储(不是堆转储)

postgresql - 安装时 postgres 的默认用户

mysql - MySQL 表的命名约定

mysql - 如果两个表只有一列不同,我是否应该有两个单独的表?