从4D备份postgresql数据库

时间:2016-06-27 11:03:57

标签: postgresql backup 4d-database

我使用4D作为前端,使用postgresql作为后端。所以我需要从前端获取数据库备份。

这是我到目前为止在4D中进行备份所做的工作。

C_LONGINT(i_pg_connection)
i_pg_connection:=PgSQL Connect ("localhost";"admin";"admin";"test_db")
LAUNCH EXTERNAL PROCESS("C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db")
PgSQL Close (i_pg_connection)

但它没有进行备份。 备份命令没问题,因为它在命令提示符下触发时工作正常。

我的代码有什么问题? 提前谢谢。

1 个答案:

答案 0 :(得分:1)

代码中的不需要的命令

如果您使用LAUNCH EXTERNAL PROCESS进行备份,则不需要PgSQL CONNECTPgSQL CLOSE

这些插件命令不会在LAUNCH EXTERNAL PROCESS的上下文中执行,因此在这种情况下不需要它们。

确保您具有写入权限

如果4D数据库作为服务运行,或者更具体地说是作为对C:\Users\Admin_user\...没有写访问权限的用户运行,那么由于权限问题,它可能会失败。

确保您正在写入您具有写入权限的位置,并确保检查$out$err参数以查看标准输出和错误流是什么。< / p>

您需要为pg_dump

指定密码

另一个问题是您没有指定密码。

您可以使用PGPASSWORD环境变量,也可以在用户的​​配置文件目录中使用pgpass.conf文件。

关于PGPASSWORD环境变量; documentation有以下警告:

  

出于安全原因,不建议使用此环境变量,因为某些操作系统允许非root用户通过ps查看进程环境变量;而是考虑使用〜/ .pgpass文件

使用pgpass.conf

的示例

以下示例假定您已准备好pgpass.conf文件:

C_TEXT($c;$in;$out;$err)
$c:="C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F"
$c:=$c+" c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db"
LAUNCH EXTERNAL PROCESS($c;$in;$out;$err)
TRACE

使用PGPASSWORD环境变量

的示例

以下示例在调用pg_dump之前设置PGPASSWORD environment variable,然后在调用后清除变量:

C_TEXT($c;$in;$out;$err)
SET ENVIRONMENT VARIABLE ( "PGPASSWORD" ; "your postgreSQL password" )  
$c:="C:\\Program Files\\PostgreSQL\\9.5\\bin\\pg_dump.exe -h localhost -p 5432 -U admin -F"
$c:=$c+" c -b -v -f C:\\Users\\Admin_user\\Desktop\\backup_test\\db_backup.backup test_db"
LAUNCH EXTERNAL PROCESS($c;$in;$out;$err)
SET ENVIRONMENT VARIABLE ( "PGPASSWORD" ; "" )  // clear password for security
TRACE

调试

请务必使用调试程序检查$out$err以查看潜在问题。