PostgreSQL中pg_dump的输出结果存放在哪里?

71

我想备份PostgreSQL数据库,想要使用pg_dump命令。
我尝试了:

psql -U postgres
postgres-# pg_dump test > backup.sql

但我不知道输出文件去了哪里。
非常感谢任何帮助。


4
为什么不这样做,然后运行find / -name backup.sql - Bohemian
针对Mac OS,请查看这个答案这里有详细的解释。 - Espoir Murhabazi
请记住,如果您想要将数据写入文件,不要在postgres命令行中运行pg_dump命令。请按照以下链接中提到的方式运行:https://stackoverflow.com/a/24931100/10027828。如果您只是简单地运行pg_dump -h localhost -p 5432 -U postgresUser dbName > backup.sql,那么backup.sql文件将保存在您运行该命令的目录中(所以如果您在Linux终端中,请输入ls来查看目录内容)。 - undefined
12个回答

69
我虽然有些晚到,但我觉得没有一个答案是正确的。大多数似乎暗示着pg_dump会在某个地方写入文件。实际上它并不会。将输出发送到一个文件中,并且告诉Shell去哪里写这个文件。
在您的示例pg_dump test > backup.sql中,使用了plain或SQL格式,pg_dump命令不会在任何地方存储文件。它只是将输出发送到STDOUT,通常是您的屏幕,然后完成。
但是,在您的命令中,您还告诉您的Shell(终端、命令提示符等)将STDOUT重定向到一个文件中。这与pg_dump无关,而是Bash或cmd.exe等Shell的标准功能。
您使用了>将STDOUT重定向到文件而不是屏幕。并且您给出了文件名:"backup.sql"。由于您没有指定任何路径,因此该文件将位于您的当前目录下。这可能是您的主目录,除非您已经cd ...进入其他目录。
在特定的pg_dump情况下,您还可以使用替代> /path/to/some_file Shell重定向的方法,即使用-f some_file选项

-f file
--file=file

将输出发送到指定的文件。对于基于文件的输出格式,可以省略此参数,此时将使用标准输出。

因此,您的命令可能是pg_dump test -f backup.sql,要求pg_dump直接写入该文件。

但无论如何,您都需要给出文件名,如果不指定路径,则文件将在当前目录中创建。如果您的提示符尚未显示当前目录,您可以在Unix上使用pwd命令,在Windows上使用cd命令来显示它。


1
简而言之:运行“pg_dump my_database”没有创建文件,它只是将我的数据库内容输出到终端。我应该将输出导入到文件中,例如:“pg_dump my_database > backup.sql”。 - Matt

40
去命令提示符并进入postgresql\9.3\bin目录。 示例
..
    c:\Program files\postgresql\9.3\bin> pg_dump -h localhost -p 5432 -U postgres test > D:\backup.sql
...

在上述命令中输入用户“postgres”的密码并检查D:\驱动器的backup.sql文件。


如果你没有D盘怎么办? - undefined

26

在我的情况下(PostgreSQL 9.1.21,Centos 6.7),该命令为:

runuser -l postgres -c 'pg_dump my_database > my_database.sql'

文件保存在这里:

/var/lib/pgsql/my_database.sql

不确定其他 Linux 发行版、CentOS 和/或 pgl 版本是否适用。根据这个问题的提问者的回答,是正确的,但其他用户说备份文件在当前目录(这种情况与大多数阅读此线程的人不同,原因显而易见)。希望这可以帮助其他遇到相同问题的用户。

P.s.:如果这不是您的情况,请尝试使用以下命令(由 @Bohemian 在此问题的评论中指出)在 Linux 中查找,但这可能需要一些时间:

find / -name 'my_database.sql'

编辑:我在尝试在Ubuntu 12.04中运行类似的命令(它可以在Ubuntu 18.04上工作):

sudo -u postgres pg_dump my_database > my_database.sql

而且在这种情况下,文件是保存在我运行命令的当前目录中的!因此,在Linux中,这两种情况都可能发生,具体取决于您正在使用的特定发行版。


1
在Ubuntu 18.04上,此命令将文件转储到您执行它的位置。它完美地工作。 - mrroot5
1
sudo -u postgres pg_dump s2s_mall > my_database.sql 对我有用,我可以在当前目录下看到 DB_bkp... 谢谢!!! - S.Yadav
1
@Brian Hellekin: "希望这能帮助其他遇到同样问题的用户。" 是的,它帮助了我!我在Ubuntu 18.04上找到了路径为/var/lib/pgadmin/storage/my username。非常感谢!附言: - Malik A. Rumi

7

对于Linux系统而言,其默认的dump路径为:

/var/lib/postgresql/

7

如果您没有指定完全限定路径,例如:

pg_dump your_db_name > dbdump

Windows中,它会将转储文件存储在当前用户的主目录中。即:

C:\Users\username


在Ubuntu中相同的操作:在root用户下运行pg_dump -U postgres dbname > dbfile,结果为root/dbfile。 - Anatoly Alekseev

4

如果您使用的是Linux(除了CentOS)

sudo su - postgres
pg_dump your_db_name > your_db_name.sql
cd /var/lib/postgresql
ls -l

在这里你将看到你的数据库名称.sql文件


3
在Mac上使用pgadmin 4,假设转储成功,您可以单击“更多详细信息”,然后您将看到一个框,其中显示“正在运行的命令:”,在该框中,您将看到/Applications/pgAdmin 4.app/Contents/SharedSupport/pg_dump --file "path/to/file",其中path to file是存储目标的路径。"原始答案"

2

完成以下步骤后

psql -U postgres

使用命令

\! pg_dump -U postgres humaine > C:\Users\saivi\OneDrive\Desktop\humaine_backup1.sql

输出文件会保存在右侧指定路径。

1

在服务器(Ubundu/Centos)上,备份文件的路径将是/var/lib/pgadmin/storage/


1
只需打开pgAdmin,右键单击您的数据库,然后选择“备份...”。在那里指定文件路径即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接