[英]How to install postgres with NSIS with all parameters?
我们有一个使用postgres作为其数据库的C#程序,因此我们希望将安装程序中的postgres捆绑为半静默安装,即用户将收到有关强制安装的通知,但安装本身将自动执行而不会需要用户输入。
在研究了对WiX,Inno Setup和NSIS的意见后,我们决定使用NSIS。 我认为最简单的方法是包含postgres的二进制.zip分配并在脚本中执行以下操作:
我对这个场景有几个问题:
Q1:我在正确的轨道上吗?
Q2:我可以以某种方式将超级用户密码传递给initdb.exe,因此它不会要求用户通过控制台输入吗?
问题3:在哪里以及如何更改postgres将侦听的端口,以便我不与其他已安装的实例冲突?
问题4:卸载时是否只需使用pg_ctl.exe取消注册服务并删除所有文件夹即可?
PS:我觉得这些问题是相互关联的,所以我把它们放在一起。 但如果需要,我可以在不同的问题中将它们分开。
这是对的。
请不要使用端口5432对PostgreSQL。 选择一个远离该范围的非默认端口,如5599或其他东西。 通过修改postgresql.conf并设置port
指令来更改port
。 您可能会发现在主postgresql.conf
简单地附加include_dir = conf.d
或类似内容然后使用您的配置覆盖创建一个datadir\\conf.d\\myapp.conf
用。
要在没有提示的情况下为initdb
设置密码,请传递--pwfile=/path/to/file
选项。 第一行将被读作密码。 请参见initdb 。
您的卸载计划是合理和正确的。
想想升级 - 不要把自己画成一个角落。 您希望能够并行安装9.5到9.4和pg_upgrade
,除非您只想使用转储和恢复。
我建议将PostgreSQL二进制文件安装到%PROGRAMFILES%\\MyApp\\PostgreSQL\\9.4
。 您应该将数据库放入%PROGRAMDATA%\\MyApp\\PostgreSQL\\9.4
而不是应用程序的%PROGRAMFILES%
目录中。 (PostgreSQL安装程序也应该这样做;它的当前行为是一个应该修复的历史工件)。
请记录您的应用程序捆绑PostgreSQL,以便没有人“清理”它,因此我们没有另一个应用程序喷出混淆用户到pgsql-general。 向愤怒的用户解释“我们”没有在他们的系统上安装PostgreSQL,我们无法删除它,它可能在那里,因为它是由他们使用的东西安装,如果他们删除它然后那将停止工作。 同样地,对刚刚杀死PostgreSQL进程并删除了他们的PostgreSQL数据目录的用户来说很难解释我们无法获得他们的Poker Tracker(或其他)数据库因为他们刚刚删除它...
确保您的应用程序公开了为用户执行PostgreSQL转储和还原的功能。
用户手册必须清楚地说明他们需要采取额外的备份步骤来保护应用中的数据。 您不能只使用Windows备份来获得可靠的PostgreSQL备份,因为它是必须一起复制的多个文件; 它会复制每个文件,但除非PostgreSQL在备份之前停止,否则组合结果将无法使用。 要进行实时备份,您需要采取特殊步骤 - pg_start_backup()
,copy, pg_stop_backup()
并存档额外的WAL段,或使用pg_basebackup
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.