Windows上运行和安装PostgreSQL方法以及常见问题

  • 1个支持平台
    • 1.1PostgreSQL在什么版本的Windows上运行?
    • 1.2不支持哪些Windows平台?
    • 1.3听说支持NT4和Windows 2000。真的吗?
    • 1.4Windows 95/98 / ME呢?
    • 1.5Windows是否有64位的PostgreSQL版本?
    • 1.6那64位ODBC驱动程序呢?
  • 2安装
    • 2.1在Windows上安装PostgreSQL需要什么?
    • 2.2我需要从源代码编译PostgreSQL吗?
    • 2.3为什么我需要一个非管理员帐户才能在其中运行PostgreSQL?
    • 2.4我可以在FAT分区上安装PostgreSQL吗?
    • 2.5PostgreSQL需要什么文件系统权限?
    • 2.6为什么我不能选择Unicode作为编码?
    • 2.7我以非英语语言安装,但所有消息均以英文显示!
  • 3常见安装错误
    • 3.1PostgreSQL和/或安装程序在启动时崩溃,无法启动或在启动时挂起
      • 3.1.1防毒软件
        • 3.1.1.1哪些兼容的防病毒软件?
      • 3.1.2软件防火墙
      • 3.1.3安装程序退出并显示运行时安装错误?
      • 3.1.4postgres用户的密码问题
      • 3.1.5PATH环境变量
      • 3.1.6安装/运行initdb时出现权限错误
      • 3.1.7检查%COMSPEC%环境变量
      • 3.1.8安装程序声称指定的帐户是管理员,但不是!
      • 3.1.9我收到一条错误消息,提示无法从终端服务会话中安装PostgreSQL
      • 3.1.10我收到错误消息“未向用户授予此计算机的请求登录类型”或类似的错误
      • 3.1.11我如何删除服务帐户-该帐户未在用户下方列出!
  • 4常见的运行时问题
    • 4.1安装过程语言时出现“动态加载错误”
    • 4.2即使我只启动了一次服务器,我也看到了很多postgres.exe进程
    • 4.3如何设置环境变量?
    • 4.4尽管具有强大的硬件,但我一次最多只能运行125个连接
  • 5Windows版本特定的问题
    • 5.1我可以在64位Windows上安装32位PostgreSQL吗?
    • 5.2PostgreSQL ODBC驱动程序在哪里?我在64位Windows上运行32位PostgreSQL
    • 5.3我可以在32位PostgreSQL服务器上使用64位ODBC程序吗?

支持平台

PostgreSQL在什么版本的Windows上运行?

Windows XP及更高版本(至少从9.0版开始)支持PostgreSQL。它将在32位和64位系统上运行。

未在发布较新的主要版本的服务器后发布的新操作系统版本上测试服务器的版本。例如,Windows 7是在PostgreSQL 8.4之后发行的,因此不支持PostgreSQL 8.3。同样,当即将发布的RHEL 6发行时,将仅支持PostgreSQL9.0.x。我们的目标是在最新发行的PostgreSQL主版本中支持Windows的新版本。

有关一键安装程序支持的平台的信息,请参阅Windows的主要下载页面之外的安装程序下载页面。

有关非Windows平台上的信息,请参见常见问题解答和主要下载页面。

不支持哪些Windows平台?

PostgreSQL安装程序未在以下方面进行测试或支持:

  • Windows XP Embedded
  • Windows 2000
  • Windows NT 4
  • Windows NT 3.5.x
  • Windows 95/98 / ME / 3.x
  • Windows CE
  • Windows Mobile

不支持这些平台。请不要向邮件列表寻求有关这些平台的帮助。

请阅读有关在嵌入式Windows版本上安装的故障排除说明,以获取有关嵌入式Windows的更多信息。

听说支持NT4和Windows 2000。真的吗?

尽管没有正式支持,但PostgreSQL可以在Windows NT4和Windows 2000上运行,但有一些小问题,包括:

  • 安装程序可能无法正常运行,因此您需要从二进制.zip发行版中手动安装PostgreSQL,或者自己编译。
  • PostgreSQL在NTFS文件系统中使用一种称为“重新解析点”的功能来实现表空间。重新解析点在NT4中不可用,因此表空间不能在NT4上使用。
  • Windows NT4中没有标准包含的“ runas.exe”,因此很难从管理帐户启动PostgreSQL。

还应注意,在NT4上进行的测试很少。

  • 在Windows NT 4或Windows 2000上没有进行测试,因此较新的版本可能无法在这些平台上运行。

请不要在邮件列表中寻求这些过时平台的帮助。不过,某些专业支持公司可能会为您提供帮助。

Windows 95/98 / ME呢?

PostgreSQL需要的功能在这些平台上不可用,并且不能在它们上运行。如果需要在这些平台上运行PostgreSQL,可以查看 Cygwin 端口,该端口对9x平台具有基本支持。

Windows是否有64位的PostgreSQL版本?

是。一个64位的Windows端口被公布为PostgreSQL的9.0。

PostgreSQL早期版本的32位版本通常可以在64位Windows上正常运行。尽管它们实际上不能直接使用超过1GB的shared_buffers,但它们仍可以从4GB以上的内存中受益,因为Windows内核将使用该内存来缓存磁盘读取。

那64位ODBC驱动程序呢?

在撰写本文时,psqlODBC源代码支持64位,但是没有官方的64位ODBC驱动程序二进制发行版。有关详细信息,请访问psqlODBC网站。

安装

在Windows上安装PostgreSQL需要什么?

有关在Windows上下载和安装PostgreSQL的各种方法,请参见Windows的PostgreSQL下载页面。

在Windows上安装PostgreSQL的最简单方法是使用EnterpriseDB维护的一键安装程序包,您可以从上面链接的页面中获得该包。这将安装PostgreSQL和pgAdmin(图形管理和管理程序),一系列“ contrib”模块以提供附加的专用功能以及一系列过程语言。将安装一个名为StackBuilder的程序,以帮助您下​​载和安装您可能需要的任何其他组件,例如ODBC或JDBC驱动程序。

我需要从源代码编译PostgreSQL吗?

有关 如何在Windows上编译PostgreSQL的说明,请参阅文档,包括有关受支持的编译器和工具的详细信息。

为什么我需要一个非管理员帐户才能在其中运行PostgreSQL?

当黑客使用软件包中的软件错误获得进入计算机的权限时,她将获得运行该服务的用户帐户的权限。虽然我们不知道PostgreSQL中的任何此类错误,但我们强制使用非管理服务帐户,以最大程度地减少黑客在发现并利用PostgreSQL中的错误来入侵系统时可能造成的损害。

长期以来,这一直是Unix世界中的普遍做法,并且已开始成为Windows世界中的标准实践,并且Microsoft和其他供应商也在努力提高其系统的安全性。

请注意,在PostgreSQL 8.2发行版中,可以在管理帐户下运行。PostgreSQL 8.2及更高版本能够在启动时无可挽回地放弃管理权限,从而确保在PostgreSQL遭到破坏的极不可能的情况下,系统的其余部分仍保持安全。

我可以在FAT分区上安装PostgreSQL吗?

不支持或未在FAT32文件系统上使用PostgreSQL,因为FAT32是一个可怕的文件系统,无法在其中运行任何数据库。

PostgreSQL的第一要务是数据的完整性。FAT和FAT32文件系统根本无法提供所需的可靠性或崩溃安全性。另外,由于缺少FAT提供的安全功能,因此无法保护原始数据文件免遭未经授权的修改。最后,PostgreSQL利用一种称为“重新解析点”的功能来实现表空间。该功能在FAT分区上不可用。

NTFS文件系统是日记文件系统,可提供更好的可靠性和崩溃恢复。此外,它具有完善的访问控制系统,并提供PostgreSQL使用的重解析点功能。

因此,PostgreSQL安装程序包不会在NTFS分区以外的任何设备上初始化数据库集群。服务器和实用程序可以安装在任何分区类型上。

但是,已经认识到,在极少数情况下,FAT分区可能是唯一的选择。在这种情况下,您可以照常安装PostgreSQL,而无需初始化数据库集群。安装完成后,请在FAT分区上手动运行“ initdb.exe”程序。但是,安全性和可靠性将受到损害,任何创建表空间的尝试都将失败。在生产中不要在FAT32上使用PostgreSQL

人们问这的最常见原因是当他们拥有USB钥匙或外部硬盘驱动器并且想要在上面放置PostgreSQL数据库时。不要这样 您可以使用NTFS格式化USB密钥和外部硬盘驱动器,如果要在它们上运行数据库,则应该这样做。FAT不是崩溃安全的,就硬盘驱动器而言,在Windows中不使用“安全删除…”而删除硬盘驱动器就算是崩溃。腐败极有可能发生。如果要与PostgreSQL一起使用NTFS来格式化可移动驱动器来存储您关心的任何数据,则非常重要

PostgreSQL需要什么文件系统权限?

PostgreSQL服务帐户需要通向服务目录的所有目录的读取权限。它需要 对数据目录的权限。具体而言,应该给予比其他任何阅读 上包含二进制文件的目录的权限。(安装目录下的所有目录都是由安装程序设置的,因此,除非您进行了更改,否则不会有任何问题)。

PostgreSQL还需要对系统DLL文件(如kernel32.dll和user32.dll(以及其他))(通常默认情况下会授予该文件)和CMD.EXE二进制文件(在某些情况下可能被锁定并需要打开)进行读取许可。

如果要在多用户系统上运行PostgreSQL,则应从PostgreSQL目录中删除所有非管理用户的权限。没有用户曾经需要处理PostgreSQL文件的权限-所有的通讯都是通过libpq连接来完成。直接访问数据文件可能会导致信息泄露或系统不稳定!

为什么我不能选择Unicode作为编码?

从PostgreSQL 8.1开始,Windows完全支持UTF-8 Unicode编码。Unicode ODBC驱动程序支持UTF-16,而JDBC驱动程序也具有完整的unicode支持。

PostgreSQL服务器不支持2字节UTF-16或4字节UTF-32 Unicode编码用于内部数据存储或在线通信。Beause UTF-16是Windows上的默认编码,Windows上的人们通常在说“ Unicode”时会表示什么,您可能会认为这是一个问题,但实际上很好,因为ODBC和JDBC驱动程序可以解决此问题。 。直接使用libpq的程序需要意识到这一点,但是没有太多其他事情了。

我以非英语语言安装,但所有消息均以英文显示!

在安装过程中选择的语言仅选择安装程序使用的语言。要更改已安装产品的消息的语言,请确保已安装本国语言 支持功能。然后编辑您的postgresql.conf文件,并将 lc_messages 参数的值更改 为所需的语言。

常见安装错误

PostgreSQL和/或安装程序在启动时崩溃,无法启动或在启动时挂起

到目前为止,Windows上PostgreSQL安装和运行时问题的最常见原因是Windows脚本宿主问题,防病毒软件问题和第三方(非Microsoft)软件防火墙。人们有时也会对postgres服务帐户密码感到麻烦。

以下文章涵盖了这些问题。在寻求安装程序问题的帮助之前,请阅读它们并遵循其说明。

防毒软件

如果安装了任何防病毒软件,则必须排除PostgreSQL要使用的数据目录,并且必须排除postgresql.exe进程。如果仍然不能解决问题,则可能需要从计算机上完全卸载防病毒软件。

防病毒软件可能会干扰PostgreSQL的操作,因为PostgreSQL要求Windows中的文件访问命令的行为与Microsoft记录的完全相同,并且许多防病毒程序包含错误或意外的行为更改,这些错误或意外的行为更改会导致这些命令的行为不当。大多数程序不在乎,因为它们以相当简单的方式访问文件。由于PostgreSQL不断从多个进程读取和写入同一组文件,因此它倾向于触发防病毒软件中的编程和设计错误,尤其是与并发相关的问题。这样的问题可能会导致随机和不可预测的错误,甚至导致数据损坏。

防病毒软件也可能会大大降低PostgreSQL的运行速度。因此,您至少应排除postgres.exe和数据目录,以便扫描程序将其忽略。

哪些兼容的防病毒软件?

用于构建Windows安装程序的系统都运行Sophos AV或AVG Free Edition,并且这些系统通过了运行这些程序的全套PostgreSQL回归测试。还可以使用Microsoft Security Essentials。

已经报告了nod32防病毒产品的特定问题。如果您使用的是此产品,则将“ postmaster.exe”添加到排除的进程列表中(在高级选项下可用)。据报道,这可以解决该问题。

还报告了McAfee和Panda防病毒软件以及NetLimiter网络监视软件的特定问题。尽管有些人确实使用这些软件包使用PostgreSQL,但没有在某些情况下无法使用的特定解决方案,甚至没有推荐的解决方案,因此问题似乎是特定于安装的,有时甚至需要卸载。

软件防火墙

如果您的计算机上安装了任何第三方防火墙软件,请尝试将其禁用或卸载。在Windows XP及更高版本上,实际上不需要第三方防火墙,因为Microsoft提供的内置防火墙已经做得很好。一些写得不好的第三方防火墙不能正确卸载,因此,卸载后,您可能必须告诉Windows修复其网络设置。

如果您拥有第3方防火墙,并且现在已将其卸载,请确保重新打开Windows防火墙,因为许多产品在安装过程中将其关闭,而在卸载过程中却无法将其重新打开。

安装程序退出并显示运行时安装错误?

安装程序可能会退出,并显示以下错误:执行Microsoft VC ++运行时安装程序时发生错误。这只能在Windows上发生。

发生这种情况的主要原因有两个:

1)Windows脚本宿主无法执行VB脚本。如果禁用了脚本主机(这是不常见的),或者安装中断,则会发生这种情况。此问题的迹象是类似CScript错误的消息:找不到脚本“ C:\ …的脚本引擎” VBScript“。通常可以通过重新注册VBscript解释器来解决-单击“ 开始” -> “运行并输入以下内容,然后单击“ 确定”

 regsvr32 %systemroot%\system32\vbscript.dll 

如果失败,则可以在Windows的较早版本上尝试更新脚本主机。

此外,请确保HKEY_CLASSES_ROOT \ .vbs \(默认值)中的注册表值为VBSFile。

2)安装程序无法正确读取文件并将其写入系统TEMP目录。如果将TEMPTMP环境变量设置为非标准值,则会发生这种情况,并且可以通过日志文件中的错误来识别该错误,表明无法执行或找到脚本。要解决此问题,请确保将TEMPTMP变量设置为其正确的值。

postgres用户的密码问题

戴夫·佩奇(Dave Page)撰写了一篇博客文章,解释了不同密码的用途以及如何解决常见问题(如重置密码)。

PATH环境变量

如果您已经安装了cygwin,并且在系统PATH变量中也存在cygwin \ bin目录,那么也会出现问题。cygwin目录中有与解释语言(TCL,perl,python)相关的DLL文件,这些文件包含可能导致安装程序或已安装的PostgreSQL版本挂起或崩溃的错误。运行安装程序之前,从路径中删除cygwin \ bin目录!

当PATH环境变量包含包含libssl和/或libintl版本的目录时,也会观察到问题。

安装/运行initdb时出现权限错误

确保PostgreSQL服务帐户对安装目录之前的目录具有权限。安装程序将在安装目录上设置权限,但不在其父目录上设置权限。

您还可能在一键安装程序中看到相关错误,显示为“数据库集群初始化失败”。

检查您的install-postgresql日志,但这通常与权限错误有关。以下线程可能会有所帮助,

http://forums.enterprisedb.com/posts/list/2044.page#7503

或者,您可以修复目录权限,然后手动重新启动initcluster.vbs脚本(针对v9),

cscript //NoLogo "<install_path>/installer/server/initcluster.vbs" "postgres" "postgres" "<password>" "<install_path>" "<data_path>" 5432 "DEFAULT" 

检查%COMSPEC%环境变量

某些Windows安装似乎附带了错误的%COMSPEC%环境变量,该变量阻止了initdb的执行。

在命令提示符下,运行:

 echo %COMSPEC% 

您应该得到类似以下内容:

 C:\Windows\system32\cmd.exe 

(其中C:\ Windows是Windows的安装位置)。

如果看到其他内容,请检查“系统”控制面板,然后在“环境”部分中检查COMSPEC。如果其值有误:

  • 设置系统还原点;和
  • 备份计算机;然后
  • 在系统环境设置中更改它,使其指向cmd.exe的正确位置。

您可以通过以下方法进行测试,以确保它是正确的:

  • 打开一个新的cmd.exe提示(不重新使用已经打开的提示);和
  • 跑步 "%COMSPEC%" /C "echo test ok"

它应该打印“ test ok”。

安装程序声称指定的帐户是管理员,但不是!

即使您不知道,指定的帐户很可能是管理员或超级用户。安装程序使用的检查专门检查Administrators或Power Users组中的成员身份。使用“本地用户和组”向后工作-打开“管理员”组,查看谁是成员。然后检查属于Administrators组成员的任何组(域或本地),以及该组的所有组成员,等等。PostgreSQL检查任何级别的嵌套组。

我收到一条错误消息,提示无法从终端服务会话中安装PostgreSQL

不幸的是。PostgreSQL后端不会从TS会话运行,并且要执行initdb,安装程序必须启动独立后端。因此,必须从控制台执行安装。请注意,如果您使用的是Windows Server 2003,则可以远程访问实际的控制台,而不仅仅是管理会话。为此,请执行mstsc / console启动远程桌面连接,然后照常连接。这将锁定服务器的本地控制台,并让您控制该会话。在这种情况下,PostgreSQL应该可以安装。

我收到错误消息“未向用户授予此计算机的请求登录类型”或类似的错误

确保指定的PostgreSQL帐户具有“作为服务登录”和“本地登录”权限。仅本地安装部分才需要“本地登录”,如果安全策略要求安装完成,则可以在安装完成后将其删除。(使用“本地安全策略” MMC管理单元授予和撤销权限。默认情况下为“本地登录”,并且安装程序通常会自动授予“作为服务登录”)。

如果仍然存在此问题,请启用审核(也使用“本地安全策略”管理单元),并让我们知道您的设置还需要其他哪些权限。

请注意,如果您的计算机是域的成员,则可以使用组策略在域级别控制安全策略的设置。

我如何删除服务帐户-该帐户未在用户下方列出!

Windows有时会在GUI工具中隐藏一些帐户,因此无法从中删除它们。这包括为PostgreSQL自动创建的服务帐户(该帐户可能从以前的安装中遗留下来)。要删除此帐户,请在命令行上使用NET命令:

 NET USER <username> /DELETE 

其中<username>是用户的Windows登录名,例如postgres

常见的运行时问题

安装过程语言时出现“动态加载错误”

通常,这意味着缺少过程语言的实际语言DLL。PostgreSQL DLL仅包含语言绑定,并且要求语言分发DLL必须存在于系统PATH中。有关不同过程语言当前所需的DLL的列表,请参阅安装说明。

若要确切查找丢失的DLL文件,可以使用Microsoft 的Depends工具。Windows支持工具中提供了该工具,该工具在Windows CD上是单独安装的。只需运行 plpl.dll(对于PL / python)即可显示缺少哪些导入。

即使我只启动了一次服务器,我也看到了很多postgres.exe进程

这是正常的。PostgreSQL使用多进程架构。在一个空系统中,您将看到两个到五个过程。客户端开始连接后,进程数将增加。

如何设置环境变量?

PostgreSQL使用环境变量进行多种设置。要在大多数Windows版本中更改环境变量,请进入“我的电脑”的“属性”,然后进入“高级”。请注意,有两组环境变量-一组适用于所有用户的系统,一组适用于当前用户。如果希望环境变量影响PostgreSQL服务,则必须更改系统变量。更改系统变量后,必须重新启动服务。

尽管具有强大的硬件,但我一次最多只能运行125个连接

当作为服务运行时,大约同时进行125个以上的连接时,您可能会遇到故障。发生这种情况的原因是PostgreSQL所依赖的某些库依赖于user32.dll,后者从称为“桌面堆”的区域分配内存。桌面堆分配给每个登录会话,非交互式会话通常分配512KB。每个运行的postgres进程通常消耗大约3.2KB的桌面堆,再加上其他开销,可能会使分配的堆耗尽大约125个连接。从命令行运行时,这种情况不会发生(或者更确切地说,在连接数量更多的情况下发生),因为交互式登录会话通常分配了3MB的Desktop Heap。

您可以通过修改注册表中的第三个SharedSection值(如本Microsoft知识库文章中所述)来增加非交互式桌面堆。请注意,应谨慎执行此操作,因为指定的值过高可能会阻止系统引导。

Windows版本特定的问题

我可以在64位Windows上安装32位PostgreSQL吗?

可以在64位Windows XP及更高版本上安装和使用最新的32位版本的PostgreSQL(8.3及更高版本),尽管它们保留了最大进程地址空间(以及共享内存)的32位限制。

如果在运行该程序的计算机上安装了64位libpq或psqlODBC驱动程序,则可以从运行该服务器的计算机或其他计算机上的64位程序连接到32位的postgresql服务器。

由于PostgreSQL服务器的32位版本仅安装32位的libpq和pgsqlODBC,因此,除非安装了64位ODBC驱动程序或libpq作为添加,否则安装该服务器的计算机上只有32位程序可以使用该数据库。 -上。

PostgreSQL ODBC驱动程序在哪里?我在64位Windows上运行32位PostgreSQL

您需要使用32位ODBC管理员来使用32位驱动程序为32位应用程序设置数据源。

除非还安装了64位版本的 psqlODBC,否则 32位PostgreSQL安装将仅具有32位ODBC驱动程序。32位ODBC驱动程序只能由32位程序使用,并且不会在64位ODBC管理器中显示

这变得令人困惑,因为在64位Windows c:\windows\system32\odbcad32上 ,尽管名称是64位 ODBC驱动程序管理员。这是Windows开发的历史产物。显然,许多应用程序和安装程序都依赖于具有该名称和路径的odbcad32.exe,因此,尽管名称现在很笨拙,但Microsoft仍然坚持使用它,这在16位到32位的过渡中很有意义,但现在却没有。这与在64位Windows上仍称为“ system32”目录的原因相同。PostgreSQL对此无能为力。

请参阅:http : //support.microsoft.com/kb/942976

在该文章中,您将看到64位Windows上的32位ODBC管理员是:

 %systemdrive%\Windows\SysWoW64\odbcad32.exe 

您可以使用上面的路径从“开始”->“运行”启动它。您将在32位ODBC管理员中看到PostgreSQL ODBC驱动程序。

您不能在64位应用程序中使用32位ODBC驱动程序。这意味着,除非您还安装了64位ODBC驱动程序,否则您仍然只能将PostgreSQL ODBC驱动程序与32位应用程序一起使用。

我可以在32位PostgreSQL服务器上使用64位ODBC程序吗?

仅当您安装了64位[2]驱动程序时。请参阅安装部分。

滚动至顶部