Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用PHP脚本将postgres数据库备份到sql文件?_Php_Postgresql - Fatal编程技术网

如何使用PHP脚本将postgres数据库备份到sql文件?

如何使用PHP脚本将postgres数据库备份到sql文件?,php,postgresql,Php,Postgresql,我有以下情况 我有一个PHP脚本,它导入一个CSV文件,然后更新postgres数据库 现在,我需要在导入之前创建数据库的备份 PHP文件在一台服务器上运行,postgres数据库在另一台服务器上运行 我尝试了exec(pg\u dump db\u name-CdiOv>/tmp/db\u name\u backup.sql),但由于数据库位于另一台服务器上,因此我认为这不会起作用 我不知道如何做到这一点,我可以用PHP编写正确的代码来执行备份,但这需要很长时间才能运行 任何adwise都将受到

我有以下情况

我有一个PHP脚本,它导入一个CSV文件,然后更新postgres数据库

现在,我需要在导入之前创建数据库的备份

PHP文件在一台服务器上运行,postgres数据库在另一台服务器上运行

我尝试了
exec(pg\u dump db\u name-CdiOv>/tmp/db\u name\u backup.sql)
,但由于数据库位于另一台服务器上,因此我认为这不会起作用

我不知道如何做到这一点,我可以用PHP编写正确的代码来执行备份,但这需要很长时间才能运行


任何adwise都将受到欢迎

pg_dump可以轻松连接到远程主机-只需选中-h选项


另外-您希望通过“-CdiOv”实现什么?

正如depesz所说,您需要使用-h选项来定义远程主机,但它仍然会提示输入密码,这是一个问题。尝试:

exec("export PGPASSWORD=mypassword && export PGUSER=myuser && pg_dump -h yourremotehost db_name -CdiOv > /tmp/db_name_backup.sql && unset PGPASSWORD && unset PGUSER");

或者,您可以使用~/.pgpass文件,但我从未尝试过。签出并

#-C=以命令开始输出,以创建数据库本身并重新连接到创建的数据库-d=将数据转储为INSERT命令#-i=忽略旧数据库服务器和新数据库服务器之间的版本不匹配-O=无所有者,数据库不属于数据库中指定的任何特定所有者#-v=Verbose,如果在命令行中运行,将输出pg#u dump的详细报告。因此,如果我这样做,它也会工作:pg#u dump domains-CdiOv-h server-u>pg#u dump.sql,这里唯一的问题是它会提示输入用户名和密码,由于这是一个内部系统,可以保存以发送用户名和密码。正确的处理方法是使用.pgpass文件()