PostgreSQL 数据库设计的备份 - 无数据

Posted

技术标签:

【中文标题】PostgreSQL 数据库设计的备份 - 无数据【英文标题】:Backup of PostgreSQL database design - without data 【发布时间】:2017-04-05 10:46:18 【问题描述】:

我试图找到一种方法来备份我的数据库设计,而不包括存储在数据库中的数据。实际上,有人可能会说我想要一个在数据库中保存所有“CREATE Scripts”的文件。理想情况下,此文件可用于重新创建数据库(当然没有数据)。

如何避免数据库备份中的数据?

我正在使用 pgAdmin 4.1.3 和 PostgreSQL 9.6。

【问题讨论】:

在备份中单击“仅模式” pg_dump with --schema-only option. 【参考方案1】:

您可以从 psql(终端) 使用它:

pg_dump -s databasename > file.dump

从 pg_dump 文档中,“-s”只转储对象定义(模式),而不是数据。

pg_dump documentation

【讨论】:

我对 PostgreSQL 比较陌生,只使用 pgAdmin 访问过数据库。那么如何打开一个可以接受 'pg_dump' 命令的命令解释器呢? (数据库不在我的电脑上,而是在某个远程服务器上。) 是linux服务器吗?你用的是什么操作系统? 我使用的是 Windows 7。 @Helge 在我的安装中它在这里:C:/Program Files (x86)/pgAdmin 4/v1/runtime/pg_dump.exe 你可以从enterprisedb.com/downloads/postgres-postgresql-downloads下载Postgre SQL来运行pg_dump命令【参考方案2】:
pg_dump --host localhost --port 5432 --username "userName" --schema-only --verbose --file "file path" "db_dev_local"

【讨论】:

解释命令的作用以及选择给定选项的原因将使这个答案更具信息性和有用性。 示例不正确。如果您使用带有双破折号的 POSIX 样式选项,那么您还需要使用 = 符号,例如--username=postgres。空格与单破折号选项一起使用,例如-U postgres.【参考方案3】:

踏入数据库-备份

然后转储选项

检查唯一架构是否为真

【讨论】:

嗨!我们知道这个备份存储在哪里吗? @CodeTrooper 如果操作系统是linux,则存储在/home//【参考方案4】:

TL;DR:将--schema-only 设置为pg_dump

pg_dump 实用程序随 Postgres 在 bin 目录中分发。该实用程序接受许多options as documented,格式为:

pg_dump <options> <database-name>

要在此处具体回答问题,请打开命令提示符窗口(*nix 中的 Shell),然后导航到 Postgres bin 目录。然后发出以下命令(显示 Windows 语法):

> set DB_NAME=mydatabase
> pg_dump.exe --username=postgres --schema-only %DB_NAME% >%DB_NAME%-schema.sql

DB_NAME 环境变量纯粹是为了方便,名称可以内联为简单起见。

--username 开关在大多数情况下是必需的,因为您可能没有以有效的 Postgres 用户身份登录到您的操作系统。

--schema-only 开关表示您只需要 DDL 语句,而不需要实际数据。

&gt;%DATABASE_NAME%-schema.sql 部分将控制台的输出重定向到名为 %DATABASE_NAME%-schema.sql 的文件,在本例中为“mydatabase-schema.sql”。

生成的文件是一个有效的 SQL 脚本,可以通过任何有效的客户端执行以重新创建所有对象。

这里有几个其他有用的例子:

我通常在 MATERIALIZED VIEW 前面加上 mv_,因此只转储以“mv_*”开头的关系的定义,我使用:

> pg_dump --username=postgres --schema-only --table=mv_* %DB_NAME% >%DB_NAME%-matviews.sql

对多个模式使用多个 --table= 参数。

仅编写 POST-DATA 对象的脚本,例如索引、触发器等,使用--section=post-data

> pg_dump --username=postgres --section=post-data %DB_NAME% >%DB_NAME%-post-data.sql

这假定默认主机、端口、身份验证等。要指定非默认设置,请参阅documentation

【讨论】:

【参考方案5】:

我遇到了同样的问题,这对我有用。

pg_dump -U postgres <database_name> > <filename.sql> --schema-only

【讨论】:

以上是关于PostgreSQL 数据库设计的备份 - 无数据的主要内容,如果未能解决你的问题,请参考以下文章

postgresql数据库备份策略

记一次pg_rman备份postgresql数据库报段错误的处理过程

记一次pg_rman备份postgresql数据库报段错误的处理过程

记一次pg_rman备份postgresql数据库报段错误的处理过程

postgresql备份与恢复数据库

postgresql数据库备份和恢复(超快)