我试图找到一种方法来备份我的数据库设计,而不包括存储在数据库中的数据。实际上,有人可能会说我想拥有一个包含数据库中所有“CREATE Scripts”的文件。理想情况下,此文件可用于重新创建数据库(当然没有数据)。
如何避免数据库备份中的数据?
我正在使用pgAdmin 4.1.3和PostgreSQL 9.6。
答案 0 :(得分:9)
您可以在psql(终端)中使用它:
pg_dump -s databasename > file.dump
从pg_dump文档中“-s”只转储对象定义(schema),而不是数据。
答案 1 :(得分:0)
答案 2 :(得分:0)
pg_dump --host localhost --port 5432 --username "userName" --schema-only --verbose --file "file path" "db_dev_local"
答案 3 :(得分:0)
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语句,而不需要实际数据。
>%DATABASE_NAME%-schema.sql
部分将控制台的输出重定向到名为%DATABASE_NAME%-schema.sql
的文件,在本例中为“mydatabase-schema.sql”。
生成的文件是一个有效的SQL脚本,可以通过任何有效的客户端执行,以便重新创建所有对象。
以下是其他一些有用的例子:
我通常使用mv_
为MATERIALIZED VIEW添加前缀,因此要转储仅以“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