Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
从4D备份postgresql数据库_Postgresql_Backup_4d Database - Fatal编程技术网

从4D备份postgresql数据库

从4D备份postgresql数据库,postgresql,backup,4d-database,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 localh

我使用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)
但它不需要备份。 backup命令正常,因为它在命令提示符下启动时工作正常

我的代码出了什么问题? 提前感谢。

代码中不需要的命令 如果您使用进行备份,则不需要使用
PgSQL CONNECT
PgSQL CLOSE

这些插件命令不会在与启动外部进程相同的上下文中执行,因此在这种情况下不需要它们

确保您具有写访问权限 如果4D数据库作为服务运行,或者更具体地说,作为对
C:\Users\Admin\u user\…
没有写入权限的用户运行,则可能由于权限问题而失败

确保您正在向具有写访问权限的位置进行写入,并且确保检查
$out
$err
参数以查看标准输出和错误流是什么

您需要为pg_dump指定密码 另一个问题是您没有指定密码

您可以使用环境变量,也可以使用用户配置文件目录中的文件

关于
PGPASSWORD
环境变量;警告如下:

出于安全原因,不建议使用此环境变量,因为某些操作系统允许非root用户通过ps查看流程环境变量;取而代之的是考虑使用~/.pGPASS文件< /P> 使用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
以查看根本问题。

谢谢。我尝试了你的代码并调试了它。它触发命令并显示密码提示。在我输入密码后,它会在那里死掉。它确实可以进一步处理。退出的唯一方法是退出命令提示符。另外,它会创建备份文件,但为空。它发生在分配给$err的值之前,因此我也无法获得错误值。只有当命令写入错误流时,$err才会被填充。关于密码,您需要将其作为参数嵌入。在将密码作为参数引用时,您的意思是将“-W password”添加到上述命令的username后面吗?它不起作用。首先,请确保在没有密码提示的情况下,从命令提示符下有一个有效的命令,这一点很重要,因为之后您将无法向流发送其他数据,例如如果命令提示输入密码。命令在命令提示符下运行后,将相同的命令和参数输入4D的
启动外部进程
。看起来您可能需要使用at
%APPDATA%\postgresql\pgpass.conf
非常感谢您。现在,postgresql数据库的备份和恢复工作正常,无需按照您的方式手动提供密码。再次感谢。