2009-08-27 122 views
3

我有以下情况。如何使用PHP脚本创建postgres数据库备份到sql文件?

我有一个导入CSV文件,然后更新Postgres数据库

现在我需要发生

的PHP文件是在一台服务器上运行之前,进口创建数据库的备份PHP脚本并在另一台服务器上的postgres数据库

我试过exec(pg_dump db_name -CdiOv > /tmp/db_name_backup.sql)但不认为这将工作,因为数据库是在另一台服务器上。

我不知道如何做到这一点,我可以在PHP中正确执行备份代码,但这需要年龄才能运行。

任何adwise可以理解

回答

4

由于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文件,但我从来没有尝试过。检出http://www.issociate.de/board/post/43225/pg_dump_+_cronjob.htmlhttp://forum.soft32.com/linux/Backup-Postgressql-ftopict460054.html

1

的pg_dump可以轻松连接到远程主机 - 只是检查-h选项。

另外 - 你想通过“-CdiOv”来实现什么?

+0

#-C =用命令开始输出,以创建数据库本身并重新连接到创建的数据库。 #-d =将数据转储为INSERT命令 #-i =忽略旧数据库服务器和新数据库服务器之间的版本不匹配。 #-O =没有所有者,数据库不属于数据库中指定的任何特定所有者 #-v =详细的,如果在命令行中运行,将输出pg_dump的详细报告。 – Roland 2009-08-27 14:39:14

+0

所以它也会工作,如果我这样做:pg_dump域-CdiOv -h服务器-u> pg_dump.sql,这里唯一的问题是它提示输入用户名和密码,我可以将它包含在文件中,因为这是一个内部系统可以保存发送用户名和密码 – Roland 2009-08-27 14:40:45

+0

正确的方式来处理它是使用.pgpass文件(http://www.postgresql.org/docs/current/interactive/libpq-pgpass.html) – 2009-08-28 06:23:09

相关问题