在Windows上安装PostgreSQL

之前我记录了一篇手工在Windows上安装PostgreSQL的文章,刚才在安装PostgreSQL 9.0.3时发现了另一种方法,可以比手工安装更快速些。

,下载PostgreSQL安装包
下载的文件的名称为postgresql-9.0.3-1-windows.exe

,安装PostgreSQL程序
要注意的是,PostgreSQL必须要安装在NTFS格式的分区里。

特别要注意,locale不可以选择Default,如果为了省事,在这里可以选择“新加坡”,这样安装后可以直接使用,无需进行后续的步骤。在这里我选择“新加坡”,但是我还是会进行后续的步骤。

,更改Windows帐号postgres的密码
在安装过程中把locale选择“新加坡”后,可以正常安装。安装过程会给Windows添加一个名为postgres的帐号,为了安全,先修改这个帐号的密码。

,停止PostgreSQL服务
在管理工具的服务项里找到PostgreSQL服务,把它停止。并把此服务登录的身份帐号密码修改为第三步修改后的新密码。

,删除PostgreSQL程序目录下的data目录

,在控制台切换到postgres用户
C:\>runas /noprofile /env /user:postgres "cmd"

因为PostgreSQL安装程序在Windows里注册PostgreSQL服务时指定的是使用postgres这个Windows帐号作为登录身份,所以初始化数据库时必须也是这个帐号,否则PostgreSQL服务将无法启动。

其实不切换到postgres用户,PostgreSQL也能正常初始化数据库,但基于上面提到的原因,如果PostgreSQL服务指定的登录身份帐号与初始化数据库时所用的帐号不一致时,PostgreSQL服务将无法启动。

,初始化数据库
这里假设PostgreSQL程序安装在D:\PostgreSQL目录下。在第六步新弹出的窗口里执行以下命令:
D:\PostgreSQL>bin\initdb.exe -D "D:\PostgreSQL\data" -E UTF-8 --locale=chs -A md5 -U admin -W

如果不加-U admin -W,则PostgreSQL数据库的超级用户是执行初始化命令时的当前Windows帐号。因为是切换到postgres这个Windows帐号里进行初始化数据库操作的,所以这时PostgreSQL的超级用户将是postgres。

,在管理工具的服务项里启动PostgreSQL服务

手工安装PostgreSQL 9.0

题记:自8.4版本以来,使用自动安装包安装postgresql到windows时,若使用默认locale,总是会在初始化数据库的时候出错。今天9.0版本发布了,下载安装时发现存在同样的问题,于是爷怒了,去TM的自动安装包,老子以后纯手工安装,再不要什么鸟安装包了。

一、下载解压

1,下载postgresql-9.0.0-1-windows-binaries.zip

2,解压postgresql-9.0.0-1-windows-binaries.zip到D:\

二、添加用户

1,添加windows用户,用于启动PostgreSQL的windows服务
D:\pgsql>net user postgres pgsqlpw /add /expires:never /passwordchg:no

2,为保证安全,此用户不允许本地登录
D:\pgsql>net localgroup users postgres /del

3,赋于windows用户postgres访问PostgreSQL安装目录的权限
D:\pgsql>cacls . /T /E /P postgres:R

三、初始化数据库

1,切换到windows用户postgres的命令行环境
D:\pgsql>runas /noprofile /env /user:postgres "cmd"

2,初始化数据库,若不使用-U admin,则数据库里自动添加当前windows用户(即postgres)为数据库帐号
D:\pgsql>bin\initdb.exe -D "D:\pgsql\data" -E UTF-8 --locale=chs -A md5 -U admin -W

3,启动数据库
D:\pgsql>bin\pg_ctl.exe -D "D:\pgsql\data" -l logfile start

4,停止数据库
D:\pgsql>bin\pg_ctl.exe -D "D:\pgsql\data" stop

四、注册为Windows服务

1,注册为windows服务,当前windows用户(即postgres)将作为PostgreSQL服务的登录用户
D:\pgsql>bin\pg_ctl register -N PostgreSQL  -D "D:\pgsql\data"

2,启动PostgreSQL服务
D:\pgsql>sc start PostgreSQL

PostgreSQL 8.4.2在Win2k3安装不成功

从8.4开始,在我的laptop的win2k3下就不能安装成功,不是权限问题,也不是字符集问题,出错的日志如下:

Initialising the database cluster (this may take a few minutes)...
Executing cscript //NoLogo "D:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "sadb" "D:\PostgreSQL\8.4" "D:\PostgreSQL\8.4\data" 5432 "English, United States"
Script exit code: 1

Script output:

Ensuring we can write to the data directory (using cacls):
处理的目录: D:\PostgreSQL\8.4\data

The files belonging to this database system will be owned by user "yuzifu".
This user must also own the server process.

The database cluster will be initialized with locale English, United States.
initdb: could not find suitable text search configuration for locale English, United States
The default text search configuration will be set to "simple".

fixing permissions on existing directory D:/PostgreSQL/8.4/data ... ok
creating subdirectories ... ok
selecting default max_connections ... 10
selecting default shared_buffers ... 400kB
creating configuration files ... ok
creating template1 database in D:/PostgreSQL/8.4/data/base/1 ... 当前目录无效。
child process exited with exit code 1
initdb: removing contents of data directory "D:/PostgreSQL/8.4/data"

Failed to initialise the database cluster with initdb

Script stderr:
Program ended with an error exit code

Error running cscript //NoLogo "D:\PostgreSQL\8.4/installer/server/initcluster.vbs" "postgres" "postgres" "(password)" "D:\PostgreSQL\8.4" "D:\PostgreSQL\8.4\data" 5432 "English, United States" : Program ended with an error exit code
Problem running post-install step. Installation may not complete correctly
The database cluster initialisation failed.

问题最大可能是出在与我安装的某个程序相冲突,但是现在我没有头绪。