Postgresql 如何在Windows上启动postgres无头服务器(无终端)? 使用PrSGRESs 9.5和LIPPQXXX C++绑定,我想启动一个PyGrES副本,它没有安装在用户机器上,而是打包在我的应用程序目录中。 目前,我正在使用pg_ctl.exe启动和停止服务器,但是当我们这样做时,pg_ctl.exe似乎会在新的终端窗口中启动postgres.exe。 我想让它在无头状态下启动postgres.exe,但无法解决如何启动

Postgresql 如何在Windows上启动postgres无头服务器(无终端)? 使用PrSGRESs 9.5和LIPPQXXX C++绑定,我想启动一个PyGrES副本,它没有安装在用户机器上,而是打包在我的应用程序目录中。 目前,我正在使用pg_ctl.exe启动和停止服务器,但是当我们这样做时,pg_ctl.exe似乎会在新的终端窗口中启动postgres.exe。 我想让它在无头状态下启动postgres.exe,但无法解决如何启动,postgresql,Postgresql,我尝试过启用/禁用日志收集器,将日志方法设置为csv文件(而不是stdout/stderr),以及一些其他与日志相关的事情,但我认为问题不在于日志记录 我也尝试过手动运行postgres.exe(没有pg_ctl),可以通过生成后台进程并重定向日志来实现无头运行,但我更喜欢使用“pg_ctl start”api来实现“等待启动”(-w)和“超时”(-t)它提供的选项。我相信您将无法使用pg_ctl实现这一点 可以通过服务器可执行文件postgres.exe直接启动PostgreSQL。或者,您可

我尝试过启用/禁用日志收集器,将日志方法设置为csv文件(而不是stdout/stderr),以及一些其他与日志相关的事情,但我认为问题不在于日志记录


我也尝试过手动运行postgres.exe(没有pg_ctl),可以通过生成后台进程并重定向日志来实现无头运行,但我更喜欢使用“pg_ctl start”api来实现“等待启动”(-w)和“超时”(-t)它提供的选项。

我相信您将无法使用
pg_ctl
实现这一点


可以通过服务器可执行文件
postgres.exe
直接启动PostgreSQL。或者,您可以使用
pg\u ctl register
创建服务并启动服务。

我相信您将无法使用
pg\u ctl
完成此操作


可以通过服务器可执行文件
postgres.exe
直接启动PostgreSQL。或者,您可以使用
pg_ctl register
创建服务并启动服务。

在我的用例中,我可以通过使用 ,并提供dwCreationFlags。 我最初使用的是CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS,但DETACHED_PROCESS仍然允许出现postgres终端。这是因为分离的_进程将在没有控制台的情况下生成pg_ctl,但是从pg_ctl继承stdin/stdout的任何进程都将尝试使用它的控制台,因为没有控制台,所以将生成一个。CREATE_NO_窗口将使用conhost.exe启动进程,但控制台将没有窗口。当pg_ctl生成的可执行文件尝试写入终端时,它们将成功写入由conhost.exe创建的控制台,该控制台没有窗口


我现在可以从代码运行pg_ctl,而不显示控制台。

在我的用例中,我可以通过使用 ,并提供dwCreationFlags。 我最初使用的是CREATE_NEW_PROCESS_GROUP | DETACHED_PROCESS,但DETACHED_PROCESS仍然允许出现postgres终端。这是因为分离的_进程将在没有控制台的情况下生成pg_ctl,但是从pg_ctl继承stdin/stdout的任何进程都将尝试使用它的控制台,因为没有控制台,所以将生成一个。CREATE_NO_窗口将使用conhost.exe启动进程,但控制台将没有窗口。当pg_ctl生成的可执行文件尝试写入终端时,它们将成功写入由conhost.exe创建的控制台,该控制台没有窗口


我现在可以从代码运行pg_ctl,而不显示控制台。

看起来,当我直接通过postgres.exe启动时,生成的每个连接都会为新的可执行文件创建一个新的postgres.exe终端。当我使用pg_ctl.exe启动时,情况并非如此,我只有一个终端。你知道如何防止这些额外的终端繁殖吗?我不知道你在说什么,但为什么不使用服务呢?我以为你说过使用
postgres.exe
对你来说很好。当我写那篇原始评论时,我只运行了postgres.exe,并让它运行而没有产生新的终端。当我开始尝试连接到它时,进程会为每个连接分叉,每个新进程都会启动一个新的终端。我们不想使用服务,因为我们想在windows用户帐户之间隔离postgres数据库。这在某种程度上与我所知道的Postgres的标准用例相反。对于我们的用例来说,Postgres可能不是最好的数据库选择,但是如果我们可以使用它,我们可以免费获得很多东西。看起来当我直接通过Postgres.exe启动时,产生的每个连接都会为新的可执行文件创建一个新的Postgres.exe终端。当我使用pg_ctl.exe启动时,情况并非如此,我只有一个终端。你知道如何防止这些额外的终端繁殖吗?我不知道你在说什么,但为什么不使用服务呢?我以为你说过使用
postgres.exe
对你来说很好。当我写那篇原始评论时,我只运行了postgres.exe,并让它运行而没有产生新的终端。当我开始尝试连接到它时,进程会为每个连接分叉,每个新进程都会启动一个新的终端。我们不想使用服务,因为我们想在windows用户帐户之间隔离postgres数据库。这在某种程度上与我所知道的Postgres的标准用例相反。Postgres也可能不是我们用例中数据库的最佳选择,但如果我们可以使用它,我们可以免费获得很多东西。我只能用VBscript来实现这一点。使用批处理文件时,当使用VBscript时,我无法摆脱控制台窗口,您是否直接运行pg_ctl.exe或postgres.exe?我使用VBscript中的
pg_ctl
,我只能使用VBscript来实现这一点。对于批处理文件,当使用VBscript时,我无法摆脱控制台窗口,您是否直接运行pg_ctl.exe或postgres.exe?我正在VBscript中使用
pg_ctl