Windows 下 PostgreSQL(no installer)的安装方法

来源:互联网 发布:html编程工具 编辑:程序博客网 时间:2024/05/01 21:41

本文以 PostgreSQL 8.3.7-1 为例,可以到 http://www.postgresql.org/ 下载 postgresql-8.3.7-1-binaries-no-installer.zip。

 

Only PostgreSQL 8.2 and above are supported on Windows. 之前大家都是通过 Cygwin 虚拟 UNIX 环境来安装 PostgreSQL。

 

言归正传,首先,把 postgresql-8.3.7-1-binaries-no-installer.zip 解压到你想安装的文件夹,比如 D:/Servers/Bin/PostgreSQL8.3.7/Bin 。

 

首先需要使用 D:/Servers/Bin/PostgreSQL8.3.7/Bin/bin 下的 initdb.exe 创建实例(其实只是创建示例所需的文件和文件夹,包括数据,但并未注册实例)。postgresql 的同一套程序文件可以在 Windows 上注册多个实例,像 SQL Server 一样。比如这里我们创建两个实例,在命令提示符里运行:

 

cd D:/Servers/Bin/PostgreSQL8.3.7/Bin/bin

initdb.exe -D D:/Servers/Bin/PostgreSQL8.3.7/Postgre1 --locale=C

initdb.exe -D D:/Servers/Bin/PostgreSQL8.3.7/Postgre2 --locale=C

 

-D 是设置实例文件所在的目录。如果在相同的目录进行多次初始化, initdb.exe 会报错的。
--locale 是用来设置区域和语言选项的,不知为什么,用 en_US、zh_CN 之类的都不行,看到参考资料【1】说要设置成 locale=C,我也不知什么意思,反正这样就可以正常初始化。

 

上述命令的运行结果就是在 Postgre1 和 Postgre2 文件夹下生成了完全相同的两堆东西,也就是创建了两个实例。

 

现在,可以在每个示例的文件夹下看到 postgresql.conf、pg_hba.conf、pg_ident.conf 三个配置文件,可以通过修改这些文件来修改实例的配置,不懂的地方可以查看 D:/Servers/Bin/PostgreSQL8.3.7/Bin/doc 下的 chm 帮助文件。不修改这3个文件,使用其默认设置,也可以正常运行数据库。


至此,初始化完成。接下来介绍两种运行数据库的方式(以 D:/Servers/Bin/PostgreSQL8.3.7/Postgre1 这个实例为例):

 

1、以程序方式运行

 

pg_ctl.exe start -D D:/Servers/Bin/PostgreSQL8.3.7/Postgre1 -l D:/Servers/Bin/PostgreSQL8.3.7/Postgre1/xxx.log


-D 是指定运行哪一个实例,-l是设定log文件的路径
(关于 pg_ctl.exe 的更多命令行参数,可以 pg_ctl.exe --help 或者查看帮助文件。)

值得一提的是,在 Postgre1 目录下的 pg_ident.conf 文件中,也可以设置log文件路径。当这个设置与命令行参数中-l的设置冲突时,将采用 pg_ident.conf 中的设置,但仍会创建由 -l 指定的 xxx.log 文件。

 

pg_ident.conf 中与log相关的设置(部分):

log_destination = 'stderr,csvlog'
# Valid values are combinations of stderr, csvlog, syslog and eventlog, depending on platform. csvlog requires logging_collector to be on.

# This is used when logging to stderr:
logging_collector = on
# Enable capturing of stderr and csvlog into log files. Required to be on for csvlogs. (change requires restart)

# These are only used if logging_collector is on:
log_directory = 'D:/Servers/Bin/PostgreSQL8.3.7/Postgre1/pg_log'
# directory where log files are written, can be absolute or relative to PGDATA
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
# log file name pattern, can include strftime() escapes

 

其中,log_destination 中的 stderr 表示写入到 log 文件,csvlog 表示写入到与 log 文件同名的 csv 文件,这两项可以同时有或只用单独某项。


关闭程序的方法:

pg_ctl.exe stop -D D:/Servers/Bin/PostgreSQL8.3.7/Postgre1

当某个实例正在运行时,其文件夹下会有一个 postmaster.pid 的文件,此时不能再使用其他 postgresql 进程运行此实例。

 

2、注册为 Windows 服务

 

注册的方法:pg_ctl.exe register -N Postgre1_svc -D D:/Servers/Bin/PostgreSQL8.3.7/Postgre1

取消注册的方法:pg_ctl.exe unregister -N Postgre1_svc

 

可以将同一个实例注册为多个不同名的服务(虽然这么做没有意义),但不能将多个实例注册为同名服务(当然啦)

 

注册成功之后,就可以用如下方式启动和停止 postgresql 的 Postgre1 实例:

net start Postgre1_svc
net stop Postgre1_svc

 

 

 

参考资料:
【1】http://www.codesky.net/article/doc/200810/200810283315779.htm