无法将 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 上的 pgadmin 连接到 greenplum postgresql
在 Windows 机器上运行 Postgresql 11 时导致“更多无法识别...”错误的原因是啥?