无法将 PostgreSQL 作为 Windows 服务运行

Posted

技术标签:

【中文标题】无法将 PostgreSQL 作为 Windows 服务运行【英文标题】:Unable to run PostgreSQL as Windows service 【发布时间】:2010-11-18 02:01:36 【问题描述】:

我的 Windows 服务中有这个:

C:/Program Files/PostgreSQL/8.4/bin/pg_ctl.exe runservice -N "postgresql-8.4" -D "D:/PostgreSQL/8.4/data" -w

它永远不会完成执行。但如果我在 dos shell 上这样做:

C:/Program Files/PostgreSQL/8.4/bin/pg_ctl.exe start -N "postgresql-8.4" -D "D:/PostgreSQL/8.4/data" -w

请注意,我只是将“runservice”更改为“start”,它工作得很好。

有什么想法吗?

【问题讨论】:

【参考方案1】:

命令runservice只能由服务管理器执行

为了修复我的 localhost windows 7 以将 postgres 作为服务启动 我使用以下命令启动数据

 pg_ctl -D "C:\Program Files\PostgreSQL\9.1\data" start 

然后检查错误状态

 pg_ctl -D "C:\Program Files\PostgreSQL\9.1\data" status 

如果你得到错误 1063 ,它很可能是权限,我执行了以下命令

 cacls "C:\Program Files\PostgreSQL\9.1\data" /E /T /C /G postgres:F

然后重新运行启动/状态,它显示一切正常,但服务管理器仍然无法启动服务

因此,在 Services->postgresql->options->logon 中,我将登录设置为本地系统帐户而不是 postgres 用户,瞧,它起作用了

【讨论】:

这对我也有用。 PostgreSQL 9.5.2。简而言之:在服务中选择服务并查看其属性并将登录更改为本地系统 我使用了NETWORK_SERVICE 用户,而不是postgres 用户。详情见这里:***.com/a/38563535/363573 更好的答案:***.com/questions/36629963/…【参考方案2】:

这发生在我身上,因为我将我的数据目录设置为 postgres windows 用户帐户无法访问的位置。

【讨论】:

这正是发生这种情况的原因!您必须在设置期间更改数据目录以避免此问题 对于普通读者来说,这里有一个正确设置数据目录权限的简单方法:***.com/a/38563535/363573. 需要注意的是,默认情况下,Windows 上的 PostgreSQL 似乎使用 NetworkService 作为用户。【参考方案3】:

系统崩溃后,我在 Windows 中遇到了这个问题。运行第一个命令在C:\Program Files\PostgreSQL\9.1\data\postmaster.pid 中显示无效数据。删除该文件就可以了。 Reference.

【讨论】:

【参考方案4】:

我在moving manually the database data files(PG_DATA 目录)之后遇到了同样的问题,但没有重新创建所有必要的权限。

这是我解决问题的方法:

1。检查旧 PG_DATA 目录的权限:

cacls "c:\path\to\old\pgdata\dir"

2。检查新 PG_DATA 目录的权限:

cacls "d:\path\to\NEW\pgdata\dir"

3。比较 1. 和 2. 的输出。

找出用户和/或权限之间的差异,然后同步它们。

注意:我发现在同步步骤中使用explorer 比直接从命令行使用cacls 更容易。

【讨论】:

【参考方案5】:

如果您更改了 pg_hba.conf ,可能您错过了文件中的某个位置。例如,该文件中的 IP 后面必须有 CIDR。它必须像 192.168.1.100/32

如果忘记输入 32,则服务器不会重新启动。

调查启动日志可能是一个线索。对于案例问题在 pg_hba.conf 中,您可以看到如下内容:

2018-11-13 00:39:34.841 PST [8284] FATAL:  could not load pg_hba.conf
2018-11-13 00:39:34.842 PST [8284] LOG:  database system is shut down

【讨论】:

【参考方案6】:

您需要检查您的日志文件和 Windows 事件日志以了解问题所在。如果那里什么都没有,你需要打破进程监视器之类的东西并获取它挂起的位置的堆栈跟踪。

【讨论】:

【参考方案7】:

我过去遇到过这个问题,是安装程序没有为运行该服务的用户正确设置权限。

【讨论】:

【参考方案8】:

在尝试初始化数据库集群后,我也遇到了 postgresql 抛出和错误的问题。在分析了日志文件并运行了 4 个小时的命令行脚本后,我已经为任何遇到此问题的 Windows 版本的人找到了解决方案。

这不是关于它发生原因的详细描述。我在无数客户端服务器和 Windows 系统上安装了 odoo 10、11、12 和 13 无数次,这是我第一次遇到这个问题。我不能说是因为我在这台机器上安装了 MS VS Enterprise 和 android Studio 还是什么。但下面是关于如何修复它、初始化集群以及在数据文件夹中创建数据库文件的简单答案。

    打开 postgresql 的数据文件夹。 - 对于 Odoo 安装,它通常是“C:\Program Files (x86)\Odoo 13.0\PostgreSQL”,除非您在安装时选择了其他位置。

    从此文件夹中删除任何或所有文件 - 否则在运行 initdb.exe 时会出现错误

    右键单击数据文件夹并打开它的属性。单击安全选项卡,然后单击底部的高级按钮。

    您需要将此文件夹的所有者更改为 openpgsvc。单击更改并键入 openpgsvc,然后单击确定。完成后单击下面的复选框,说明您希望此更改也影响具有此容器的容器。

    然后在权限选项卡上单击底部的添加按钮。您需要将 openpgsvc 添加为用户并赋予该用户全部权限。单击应用和确定以关闭所有文件夹属性。

    现在您需要打开 cmd.exe - 打开后,我们将调用 initdb.exe 并向其传递一些值。

    首先运行 chdir 并将工作目录更改为 initdb.exe 的位置。对我来说,在 Windows 10 机器上运行 odoo 13 的位置是这个..

“C:\Program Files (x86)\Odoo 13.0\PostgreSQL\bin”

    还需要传递一个变量才能使这项工作在这里工作是列表。需要包含在对 initdb.exe 的调用中

Postgres 数据目录:“C:\Program Files (x86)\Odoo 13.0\PostgreSQL\data”

对于我的安装,带有参数的最终结果如下所示:

"C:\Program Files (x86)\Odoo 13.0\PostgreSQL\bin\initdb.exe" -D "C:\Program Files (x86)\Odoo 13.0\PostgreSQL\data"

    按 Enter 并让它撕裂。此命令的输出应如下所示。 Cmd.exe running initdb.exe script

【讨论】:

【参考方案9】:

在 Windows 7 上安装 PostgreSQL 10(是的,时间在流逝……)。我首先尝试了完全无法安装的最新版本 11……这对 Windows 用户来说不是一个好兆头。无论如何。

快速回答:将 Windows 服务面板中的帐户从网络更改为本地。

我的案例详情

在安装过程中,我在用户配置文件夹中创建/选择了一个数据文件夹,因为显然默认建议的文件夹在程序文件夹中不起作用,如果它起作用,将数据放在这里是一个很好的主意(我不知道在 Unix/Linux 上是否通常这样做,但对于 Windows,这是很长时间不允许的)。

最后(填充数据集群时)我收到一个错误:

未能将 SQL 模块加载到数据库集群中

但安装能够完成。我发现了两页关于先前错误的页面,here 和 here,但它们似乎与我的情况无关,所以我刚刚启动了 pgAdmin,在左侧的“浏览器”中,看到服务器没有处于活动状态。

我试图从这里启动它(必须输入主密码),但它又立即变为非活动状态。所以我尝试使用Windows服务面板启动“postgresql-x64-10”,没有任何乐趣。我从这个面板复制了命令并将其粘贴到 Windows 控制台 (cmd.exe) 中,我终于收到了这个

错误 1063。

搜索我发现了这个相关的问题,并确信问题与权限有关。

适合我的情况的解决方案

按照@AlexanderRios 的评论建议,在服务面板中,我将用于启动服务的帐户从网络服务更改为本地系统。

【讨论】:

【参考方案10】:
sc create "postgresql-9.2" binPath= "\"C:/Program Files (x86)/PostgreSQL/9.2/bin/pg_ctl.exe\" runservice -N \"postgresql-9.2\" -D \"C:/Program Files (x86)/PostgreSQL/9.2/data\" -w" DisplayName= "postgresql-9.2" start= auto

在 CMD 上试试这个以管理员身份运行 (添加参数取决于您的版本)

【讨论】:

【参考方案11】:

确保C:\ 中没有错误的空文件Program,例如C:\Program

在这种情况下,每当您登录 Windows 时,资源管理器都会发出警告。

File Name Warning
-----------------
There is a file or folder on your computer called "C:\Program" which
could cause certain applications to not function correctly. Renaming it
to "C:\Program1" would solve this problem. Would you like to rename
it now?

【讨论】:

【参考方案12】:

打开pgAdmin III,然后在右窗格中找到服务器,然后右键单击并连接,输入密码。连接后转到浏览器并刷新 ODOO。问题解决了。

查看图片以获得更好的理解

【讨论】:

以上是关于无法将 PostgreSQL 作为 Windows 服务运行的主要内容,如果未能解决你的问题,请参考以下文章

从Windows容器对PostgreSQL数据库进行外部化

Windows安装PostgreSQL数据库 无法初始化数据库问题

无法从 Windows 上的 pgadmin 连接到 greenplum postgresql

在 Windows 机器上运行 Postgresql 11 时导致“更多无法识别...”错误的原因是啥?

将 postgresql 本地复制到远程数据库(都带有密码) - 错误:无法识别选项“区域设置”

PostgreSQL 和SQL Server哪个更好些?(作为平时学习之用)