0

在 NSIS 安装程序中,我使用以下行从与安装程序一起打包的文件中恢复 PostgreSQL 数据库。

ExecWait '$pg_restore_path --host 127.0.0.1 --no-password --port 5432 --username "postgres" --dbname "myDatabase" --verbose $EXEDIR/myDatabase.backup' $0

该命令有效,但 pg_restore 似乎错误地设置了某些 postgres 序列的当前值(当前值被重置为 1 或低于源值的数字)导致冲突。这似乎是 postgres 的原生错误,但真的不确定。

我也尝试过用 psql 替换 pg_restore,如下所示:

ExecWait '$psql_path -f "$EXEDIR/myDatabase.sql" myDatabase'

哪个不起作用;终端弹出并关闭。或者像这样:

ExecWait '$psql_path myDatabase < $EXEDIR/myDatabase.sql'

导致错误的原因psql: warning: extra command-line argument "<" ignored

当我psql从命令行手动运行命令时,它就像一个魅力,并且序列设置正确。所以我的问题是如何让psql命令在 NSIS 中工作并提供文件<并避免错误。如果做不到这一点,关于使用pg_restore不同的方法可以解决序列问题的任何见解?

谢谢

4

1 回答 1

1

以下 NSIS 命令似乎已经解决了它。

ExecWait '$createdb_path -h "127.0.0.1" -p "5432" -U "postgres" -T "template1" --owner "user_owner" myDatabase'
ExecWait '$psql_path -f "$INSTDIR/myDatabase.sql" myDatabase user_owner'
于 2012-05-24T17:56:20.670 回答