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 のネイティブ バグのようですが、よくわかりません。

また、次のように pg_restore を psql に置き換えてみました。

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 に答える