代码中不需要的命令
如果您LAUNCH EXTERNAL PROCESS
用于进行备份,则不需要PgSQL CONNECT
and PgSQL CLOSE
。
这些插件命令不在相同的上下文中执行,LAUNCH EXTERNAL PROCESS
因此在这种情况下不需要它们。
确保您具有写入权限
如果 4D 数据库作为服务运行,或者更具体地作为没有写入权限的用户运行C:\Users\Admin_user\...
,那么它可能由于权限问题而失败。
确保您正在写入您具有写入权限的位置,并确保检查$out
和$err
参数以查看标准输出和错误流是什么。
您需要为 pg_dump 指定密码
另一个问题是您没有指定密码。
您可以使用PGPASSWORD
环境变量或使用pgpass.conf
用户配置文件目录中的文件。
关于PGPASSWORD
环境变量;该文档有以下警告:
出于安全原因,不建议使用此环境变量,因为某些操作系统允许非 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
环境变量,然后在调用之后清除该变量:
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
查看潜在问题是什么。