ehxz 发表于 2006-12-24 14:32:42

在Windows平台下编译 PostgreSQL的常见问题(FAQ)[ZT]

<p>中文版当前维护人员:金步国 (<a href="mailto:csfrank@citiz&#46;net">csfrank@citiz&#46;net</a>)、Daojing&#46;Zhou (<a href="mailto:doudou586@gmail&#46;com">doudou586@gmail&#46;com</a>) </p><p><br />本文档的最新版本可在<a href="http://pginstaller&#46;projects&#46;postgresql&#46;org/faq/FAQ_windows&#46;html">http://pginstaller&#46;projects&#46;postgresql&#46;org/faq/FAQ_windows&#46;html</a> 浏览。 </p><p><br />在Windows平台下编译 PostgreSQL的常见问题(FAQ)可在 <a href="http://www&#46;postgresql&#46;org/files/documentation/faqs/FAQ_MINGW&#46;html">http://www&#46;postgresql&#46;org/files/documentation/faqs/FAQ_MINGW&#46;html</a>浏览。 </p><p><br />本文档内容仅针对 PostgreSQL的Windows原生版本,还有一个Cygwin模拟版本,它的FAQ文档在这里浏览:<a href="http://www&#46;postgresql&#46;org/files/documentation/faqs/text/FAQ_CYGWIN">http://www&#46;postgresql&#46;org/files/documentation/faqs/text/FAQ_CYGWIN</a>。 </p><p /><p>--------------------------------------------------------------------------------</p><p><br />支持的系统平台 <br />1&#46;1) PostgreSQL 可以运行在哪些Windows版本上?<br />1&#46;2) 是否支持在Windows NT4的平台下运行?<br />1&#46;3) PostgreSQL可以运行在 Windows 95/98/ME平台下?</p><p /><p>安装 <br />2&#46;1) 在Windows上安装PostgreSQL需要做些什么?<br />2&#46;2) 自已从源代码编译PostgreSQL怎么做?<br />2&#46;3) 运行PostgreSQL为何需要一个非管理员帐号?<br />2&#46;4) 可以将PostgreSQL安装在FAT分区吗?<br />2&#46;5) PostgreSQL 需要什么样的文件系统权限?<br />2&#46;6) 为什么我不能选择Unicode编码?<br />2&#46;7) 我安装选择了一个非英文的语言,但所有的信息仍显示为英文!<br />2&#46;8) 如何使用免安装版本完全手动安装?[译者添加]</p><p /><p>常见安装错误 <br />3&#46;1) PostgreSQL与/或其安装程序在启动时崩溃、不能正常启动或是启动后挂起<br />3&#46;2) 安装程序声称指定的帐号是管理员帐号,但(你认为)不是!<br />3&#46;3) 我收到一个类似 "the user has not been granted the requested logon type at this computer(用户没有被分配必需的登录权限)"的错误信息<br />3&#46;4) 在安装/运行initdb时,我收到一个权限错误信息<br />3&#46;5) 我收到一个错误信息显示PostgreSQL不能够从一个终端服务会话中进行安装<br />3&#46;6) 安装时我改变了目录,但PostgreSQL还是安装在缺省的目录<br />3&#46;7) 在升级安装时,安装程序说我没有权限安装一个服务,但我是以管理员登录的<br />3&#46;8) 我收到一个错误信息说安装包无法打开</p><p /><p>常见运行错误 <br />4&#46;1) 为何我在安装一个过程语言时会收到一个"dynamic load error"错误?<br />4&#46;2) 虽然我只启动了服务器一次但发现有很多的postgres&#46;exe进程</p><p /><p /><p>--------------------------------------------------------------------------------</p><p /><p>支持的系统平台 </p><p>1&#46;1) PostgreSQL可以运行在哪些Windows版本上? </p><p>PostgreSQL可运行在 Windows 2000 / XP / 2003,截止本文档完成时,主要是在32位的Windows版本上进行了测试。 </p><p><br />1&#46;2) 是否支持在Windows NT4的平台下运行? </p><p>虽然官方未表示支持,事实上PostgreSQL可以运行在Windows NT4系统上,但存在以下一些小问题:</p><p><br />安装程序不能正常运行,你需要自已手动编译并安装PostgreSQL。 <br />PostgreSQL利用NTFS文件系统中的一项功能“多分点(reparse points)”来完成表空间功能,“多分点”功能不能在NT4下使用,因此PostgreSQL的表空间功能自然也不能使用。 <br />在NT4下没有“runas&#46;exe”程序,因此以管理员的帐号来启动PostgreSQL非常困难。 </p><p>另外要说明的是,在Windows NT4下,我们对PostgreSQL系统所作的测试较少。</p><p /><p>1&#46;3) PostgreSQL可以运行在 Windows 95/98/ME平台下吗? <br />PostgreSQL所必需的一些操作系统功能在这些操作系统下不存在,因此不能运行。如果你一定要在这些操作系统下运行PostgreSQL,你可以使用 Cygwin模拟环境版本,该版本提供Win9X平台下的基本支持。 </p><p><br />安装 </p><p>2&#46;1) 在Windows上安装PostgreSQL需要做些什么? <br />在Windows上安装PostgreSQL最简单的方法是从PostgreSQl的FTP站点或镜像站点下载Windows安装程序,这个安装程序将可以(采用缺省方式或是定制方式)在Windows上安装一个已编译好的PostgreSQL数据库软件、一个图形界面的管理程序pgAdmin、可选择的有附加功能的增值模块和过程语言。 </p><p>为了能使用这个安装程序,你的计算机需要运行Windows 2000 / XP / 2003,同时系统的安装服务程序应已启用,安装程序会根据需要来创建一个(用于启动postmaster的)服务帐号,同时初始化数据库。 </p><p><br />安装程序可从 这里 下载。 </p><p /><p>2&#46;2) 自已从源代码编译PostgreSQL怎么做? <br />在Windows下从源代码编译PostgreSQL的常见问题FAQ在 <a href="http://www&#46;postgresql&#46;org/files/documentation/faqs/FAQ_MINGW&#46;html">http://www&#46;postgresql&#46;org/files/documentation/faqs/FAQ_MINGW&#46;html</a> 里有编译过程的详细细节。 </p><p /><p>2&#46;3) 运行PostgreSQL为何需要一个非管理员帐号? </p><p>当一个黑客利用一个软件的BUG进入一台计算机时,他就获得了这个软件运行所使用的用户帐号的权限。目前我们不知道PostgreSQL是否有这样的BUG,我们坚持使用非管理员帐号运行PostgreSQL的目的就是为了减少(万一)黑客利用在PostgreSQL发现的BUG可能对系统造成的损害。 </p><p>在UNIX的世界中,这已是一个常见的习惯了(即不使用管理员帐号进入系统),在Windows世界中,微软和其他软件供应商们为了提高系统的安全性,也正开始逐渐将这一操作变成标准习惯。 </p><p /><p>2&#46;4) 可以将PostgreSQL安装在FAT分区吗? <br />PostgreSQL首要任务是保证数据的完整性。FAT和FAT32文件系统不能提供为达到这一目的的可靠性,而且FAT文件系统安全性的缺乏使得保护原始数据不被未经授权的更改无法保证,最后PostgreSQL使用一项“多分点(reparse points)”的功能来完成表空间功能,这一特性在FAT文件系统下也是无法实现的。 </p><p>NTFS文件系统是一个日志式文件系统,提供了好得多的可靠性和恢复功能,而且它有较全面的存取控制功能,并提供PostgreSQL要用到的多分点功能。 </p><p>基本上述原因,PostgreSQL安装程序只能在NTFS分区中完成数据库的初始化工作,而PostgreSQL服务器程序自身和一些工具程序可以安装在任何分区中。 </p><p>然而也要看到,在一些系统中,特别是开发人员的电脑上,也许只有一种FAT分区,在这种情况下,你可以象正常情况下一样安装PostgreSQL,但不要进行数据库的初始化工作,在安装完成后,在FAT分区上手动执行initdb&#46;exe程序,但安全性和可靠性就不能保证了,要想建立表空间也会失败。 </p><p /><p>2&#46;5) PostgreSQL需要什么样的文件系统权限? <br />PostgreSQL的运行帐号需要对PostgreSQL目录下及所有子目录的读权限,需要对数据目录的写权限,特别是这个帐号不应分配对一些含有二进制程序文件的目录除了读权限以外的任何权限(所有安装目录下的目录权限,安装程序均会自动设置好,所以除非你想改变什么设置,一般情况下,安装后没有任何权限设置问题)。 </p><p>PostgreSQL还需要对系统DLL文件(如kernel32&#46;dll和user32&#46;dll以及其他DLL文件)的读权限, 默认这些权限是已分配的,但对CMD&#46;exe程序的执行,在某些情况下会被锁定,需分配此权限。 </p><p><br />如果你在一个多用户系统中运行 PostgreSQL,你应该移除非管理员对PostgreSQL目录的操作权限,没有一个用户需要任何处理PostgreSQL文件的权限,所有的通讯都是通过libpq连接来完成,直接存取PostgreSQL数据文件会导致数据不安全和系统的不稳定! </p><p><br />2&#46;6) 为什么我不能选择Unicode编码? <br />在PostgreSQL 8&#46;1及以后版本中,(UTF8)UNICODE编码在Windows平台上是完全支持的。</p><p>为了不使PostgreSQL使用人员引起不必要的认识问题,本条目所解释的有关PostgreSQL8&#46;1版及以前版本在Windows平台上不能选择UNICODE的内容现由译者清除。</p><p><br />2&#46;7) 我安装了一个非英文的语言,但所有的信息都显示为英文! <br />在安装时的语言选择只是选择了安装程序的语言,要改变提示信息的语言, 首先确认你已安装了自然语言支持(Natural language support)特性,然后编辑postgresql&#46;conf文件来改变lc_messages的参数数值来选择你想要的语言。 </p><p><br />2&#46;8) [译者添加]如何使用免安装版本完全手动安装? <br />以 Windows XP SP2 默认环境进行手动安装为例,其他版本未经测试。</p><p>首先下载postgresql-8&#46;1&#46;4-1-binaries-no-installer&#46;zip,假设解压后的目录是:D:\GreenAPP\pgsql(下面使用"$PG"表示该目录)。<br />在"$PG"目录下创建一个rootpass&#46;txt文件,内容为数据库的超级用户密码。<br />准备工作到此结束,下面的步骤以管理员身份执行。</p><p><br />移动DLL文件:</p><p>move /y lib\comerr32&#46;dll bin\</p><p>move /y lib\krb5_32&#46;dll bin\</p><p>move /y lib\libeay32&#46;dll bin\</p><p>move /y lib\libiconv-2&#46;dll bin\</p><p>move /y lib\libintl-2&#46;dll bin\</p><p>move /y lib\libpq&#46;dll bin\</p><p>move /y lib\pthreadGC2&#46;dll bin\</p><p>move /y lib\ssleay32&#46;dll bin\</p><p>添加新的postgres用户,并将密码设为:p</p><p>net user postgres p /ADD /EXPIRES:NEVER /PASSWORDCHG:NO</p><p>net localgroup users postgres /delete<br />创建data目录并设置访问权限:</p><p>md data<br />cacls &#46; /T /E /P postgres:R<br />cacls data /T /E /P postgres:C<br />初始化PostgreSQL数据库,切换用户时需要手动输入postgres用户的密码:p</p><p>runas /noprofile /env /user:postgres "bin\initdb -D data -E EUC_CN --locale=\"Chinese_People's Republic of China&#46;936\" -A md5 -U root --pwfile=rootpass&#46;txt"<br />这样就安装好了。需要说明的是数据库默认编码为:EUC_CN(GB2312),区域设置为:zh_CN&#46;GBK,数据库超级用户名为:root,密码为rootpass&#46;txt文件内容,使用md5认证。</p><p>以后可以使用:</p><p>runas /noprofile /env /user:postgres "$PG\bin\pg_ctl start -w -D $PG\data"启动PG,使用:$PG\bin\pg_ctl stop -D $PG\data -m smart关闭PG。</p><p><br />常见安装错误 <br />3&#46;1) PostgreSQL与/或其安装程序在启动时崩溃、不能正常启动或是启动后挂起 </p><p>目前针对这一现象最主要的原因是防病毒软件和防火墙软件造成的。如果你的电脑上安装有防火墙软件,可以试着禁用它或是卸载它。如果你的电脑上安装有防病毒软件,你也必须禁止它对PostgreSQL用到目录的监控,如果这样还不能起作用,也许需要完全地从你的电脑中卸载它。 </p><p>有一些关于nod32防病毒产品的特例情况,如果你使用这个产品,在其高级选项中,将“postmaster&#46;exe”加入到它不处理程序列表中去,这样就可以解决这个问题。 </p><p>也有一些关于Mcafee和Panda防病毒软件以及NetLimiter网络监控软件的特例情况报告,由于一些人能够使PostgreSQL与这些软件共同工作,因此对那些PostgreSQL与这些软件不能正常运行的情况没有特别的或是推荐的方案,问题表现出安装有一定的特殊性,有时需要卸载(或重安装)。 </p><p>另外还有一个问题就是如果你安装了Cygwin,并且cygwin\bin目录在系统的搜索路径Path变量,在cygin目录下有一些与解释型语言(TCL、perl、python)相关的DLL文件可能含有BUG会导致安装程序或是安装好的PostgreSQL运行时挂起或崩溃,只要在运行安装程序前将cygwin\bin从系统路径中删除即可! </p><p /><p>3&#46;2) 安装程序声称指定的帐号是管理员帐号,但(你认为)不是! <br />最大可能是你所指定的帐号是一个管理员帐号或是Power用户组帐号,但是你还未意识到这一点。安装程序会特别针对管理员组和Power用户组的成员进行检查。按照你原来的方法使用本地用户和工作组再操作一次 -- 打开管理员工作组,看一下有哪些成员。然后检查任何属于管理员级别的工作组(域中或本地组),同时也检查这些组的成员。 PostgreSQL可以对嵌套的工作组设置进行深入的检查。 </p><p><br />3&#46;3) 我收到一个类似 "the user has not been granted the requested logon type at this computer(用户没有被分配必需的登录权限)"的错误信息 <br />首先确认所指定的PostgreSQL帐号有“作为服务程序登录”和“本地登录”的权限,“本地登录”的权限只是在安装时需要,安装完成后可以根据安全策略的需要删除此权限(权限的分配和删除可进入MMC程序的“本地安全策略”的子栏目,“本地登录”的权限是默认的,“作为服务程序登录”的权限正常情况下是由安装程序分配的)。 </p><p>如果仍然存在此问题,打开“审核允许”权限(也在“本地安全策略”的子栏目中),同时也请通知我们,在这种情况下还需要什么权限。 </p><p>注意,如果你的计算机是“域”中成员,你的安全策略设置也许是在域服务器上使用工作组安全策略来设定的。 </p><p><br />3&#46;4) 在安装/运行initdb时,我收到一个权限错误信息 <br />确认PostgreSQL的运行帐号有对安装的PostgreSQL目录有(合适的)权限。安装程序会设置安装目录的权限,但并不设置其父目录的权限。详见问题2&#46;5可浏览所必须的权限信息。 </p><p /><p>3&#46;5) 我收到一个错误信息显示PostgreSQL不能够从一个终端服务会话中进行安装 <br />很不幸,确实是这样。PostgreSQL的后台程序不能够从终端服务会话中运行,为了能够初始化数据库,安装程序需要启动一个独立的后台进程,因此安装程序需要从一个控制台中启动。如果你使用的是Windows Server 2003,你可以获取对真正控制台的远程存取权限, 为了做到这一点,可以通过执行mstsc /console程序来启动远程桌面连接,这会锁定服务器上的本地控制台而给你完全的控制权,在这种情况下,PostgreSQL的安装没有问题。 </p><p><br />3&#46;6) 安装时我改变了目录,但PostgreSQL还是安装在缺省的目录 <br />首先确认你更改了根目录的内容, PostgreSQL安装程序允许更改每一个模块的目录,如果你更改了根目录("PostgreSQL"),其他的子模块(如Database Server)将自动继承根目录的值作为缺省值,但是如果你只是更改了子模块的目录,系统还是会安装在缺省的目录。 </p><p><br />3&#46;7) 在升级安装时,安装程序说我没有权限安装一个服务,但我是以管理员登录的 <br />解决方法是首先卸载先前的版本,这并不会删除你的数据,然后确保将新版本安装到同一目录中,就可以解决这个问题了。需要注意的是这个方法仅仅适用于小的版本升级(如:8&#46;0&#46;1→8&#46;0&#46;2),因为它们不需要转储/重载(dump/reload)。</p><p><br />3&#46;8) 我收到一个错误说安装包无法打开 <br />可能有两个原因。最可能的原因是你直接在ZIP文件中双击MSI所致,你必须将ZIP完全解压到一个临时目录中以后再运行MSI文件。另一个原因是你下载的文件已经被损坏了,可以尝试从另一个不同的镜像站点重新下载来解决问题。</p><p /><p>常见运行错误 </p><p>4&#46;1) 为何我在安装一个过程语言时会收到一个"dynamic load error"错误? <br />大多数情况下这表示与某个过程语言相关的DLL文件丢失,PostgreSQL 的DLL文件只能包含了该语言的入口调用,还需要该过程语言自身的DLL文件存在于系统的搜索路径PATH中。不同的过程语言需要的不同的DLL文件,详情可参见 安装指南。 </p><p>为了找出具体哪一个DLL文件丢失,你可以使用来自微软的依赖性检查工具,它在微软的支持软件工具包中,在一个单独的安装光盘上,只要运行了depends plpython&#46;dll(对PL/python语言来说)就可以显示出哪一个DLL文件不存在了。 </p><p><br />4&#46;2) 虽然我只启动了服务器一次但发现有很多的postgres&#46;exe进程 <br />这是正常情况。PostgreSQL使用多进程体系结构,在一个无用户连接的空系统中会有2至5个进程,一旦用户开始连接服务器,PostgreSQL的进程数就会增加。 <br /></p>
页: [1]
查看完整版本: 在Windows平台下编译 PostgreSQL的常见问题(FAQ)[ZT]