![PostgreSQL 服务器安装 - 无法找到或访问 dll](https://linux22.com/image/552476/PostgreSQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E8%A3%85%20-%20%E6%97%A0%E6%B3%95%E6%89%BE%E5%88%B0%E6%88%96%E8%AE%BF%E9%97%AE%20dll.png)
当我尝试安装 postgresql-9.0.4-1-windows.exe 时,在安装结束时出现错误。“... 未找到 libintl-8.dll...”
(与本主题相同:http://forums.enterprisedb.com/posts/list/2526.page 直接链接: http://forums.enterprisedb.com/posts/downloadAttach/147.page;jsessionid=43B371483530826B5E7EE9151F79279C)
我发现的有关此错误的所有内容都表明 Windows 用户帐户存在权限问题,但我以管理员身份登录。我尝试将 PostgreSQL 服务器与数据目录一起安装在默认磁盘 (D:\Apps) 以外的其他磁盘上。数据目录已创建,并且存在相关 dll (libintl-8.dll)。
后果是PostgreSQL Windows服务无法启动。
我不是 Windows 专家,所以我的问题有两个:
- 管理员的权限是否降低导致了此错误?
- 除了特权之外,此错误是否还有其他原因?
提前感谢任何见解
答案1
从屏幕截图中可以看到,这是与以下问题相关的初始化数据库,执行,它创建/初始化新的数据库集群。正如 PostgreSQL 文档所述:
initdb 必须以拥有服务器进程的用户身份运行,因为服务器需要访问 initdb 创建的文件和目录。由于服务器不能以 root 身份运行,因此您也不能以 root 身份运行 initdb。(事实上,它会拒绝这样做。)
根据安装程序install-postgresql.log
doc中应该有日志文件%TEMP%
,这样您就可以获得更多信息(另外还有--debuglevel
安装程序选项,运行即可--help
查看更多说明)。
如果您在安装过程中遇到任何问题,请检查在 Linux 或 Mac OS X 上的 /tmp 或 Windows 上的 %TEMP% 中创建的日志文件。该文件将被称为 install-postgresql.log。日志文件可能包含您在安装过程中指定的超级用户密码,在与任何人共享日志之前应将其替换。
您是否使用默认的 postgres 超级用户/服务帐户?我不知道这是否有帮助,但您尝试在(全新)安装之前通过(使用具有管理员权限的 cmd)将其删除:
net user postgres /del
答案2
仅仅因为您以管理员身份登录并不意味着您可以访问所有文件 - 它只是意味着您可以授予自己访问每个文件的权限。
检查相关 DLL 的权限,并确保运行安装的用户和 postgres 服务帐户都具有该文件的读取权限
答案3
更新:我也可以按照以下步骤在 Windows Server 2008 上成功安装 Postgres 9.4.x。
我在 Windows Server 2008 上安装 Postgres 9.0.x 时遇到了同样的 libint-8.dll 和其他问题(详细信息:以管理员身份运行安装程序,选择使用服务帐户作为服务安装)。
为了让事情正常运转,我必须做以下事情:
最后,我只使用了一个级别的目录来安装可执行文件(以及数据目录)。我一直试图创建一个文件夹结构,其中可执行文件位于几个文件夹深处,所以我指定了 folderA/folderB/finalfolder。我在谷歌搜索时发现的某个页面建议不要这样做,而是最多创建一个文件夹级别。(我试图通过浏览器历史记录找到该页面,因为它似乎解决了我的问题,我想表示感谢。但我再也找不到该页面了)。
根据其他沮丧的人提出的权限问题解决方案,我也开始让“每个人”完全控制安装目录和数据目录。然而,其他解决方案忽略了下一步,这对安全很重要:
然后,这对于安全很重要,一旦安装在上述两点的组合下工作,我就在可执行文件夹(及以下)上为 postgres 服务帐户添加了读取和执行权限,并在数据文件夹上添加了修改|写入|读取权限。然后,我剥夺了我授予“Everyone”的权限。我重新启动了数据库服务,它仍然有效,但现在没有了 Everyone 的看似不安全的权限。
总的来说相当痛苦。花了 2-3 个小时才找到似乎有效的组合。
答案4
我遇到了完全相同的问题。尝试在我的用户文件夹中安装 PostgreSQL(使用管理员权限)。同样的问题。
解决方案:安装在 中C:\PostgreSQL
,不使用子目录。对我来说立即有效。