在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
的不同见解可以解决序列问题?
由于
答案 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'