NSIS运行pg_restore或psql命令 - 无法正确恢复数据库

时间:2012-05-24 14:16:34

标签: postgresql nsis

在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的原生bug,但实际上并不确定。

我也尝试用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中使用文件feeded <并避免错误。如果做不到这一点,任何有关使用pg_restore的不同见解可以解决序列问题?

由于

1 个答案:

答案 0 :(得分: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'