一、环境:
1. 操作系统:win7 64bit
2. 集成环境:Visual Studio Team System 2010 SP1
3. PG源代码:PostgreSQL 9.4.0
二、安装步骤:(..代表源码解压后的路径)
1. 用VS的CMD工具,在..\postgresql-9.2.2\src\tools\msvc路径下执行
build DEBUG。
2. 注释掉..\src\backend\main\main.c的“check_root(progname);”这一行。
3. 创建数据库目录(以在..\postgresql-9.2.2里新建db目录为例),用cmd在
..\postgresql-9.2.2\src\tools\msvc路径下执行
install ..\postgresql-9.4.0\db。
4. cmd里在..\postgresql-9.2.2\db\bin路径下执行
initdb dbtest 。
5. 打开..\postgresql-9.2.2\pgsql.sln,对postgres工程增加命令参数“
-D db\bin\dbtest”, 并且修改 pg_config_paths.h如下:
#define
PGBINDIR
"/bin"
#define
PGSHAREDIR
"E:/iWork/DB/PGdebug/postgresql-9.4.0/db/share"
#define
SYSCONFDIR
"/etc"
#define
INCLUDEDIR
"/include"
#define
PKGINCLUDEDIR
"/include"
#define
INCLUDEDIRSERVER
"/include/server"
#define
LIBDIR
"E:/iWork/DB/
PGdebug
/postgresql-9.4.0/db/lib"
#define
PKGLIBDIR
"E:/iWork/DB/
PGdebug
/postgresql-9.4.0/db/lib"
#define
LOCALEDIR
"/share/locale"
#define
DOCDIR
"/doc"
#define
HTMLDIR
"/doc"
#define
MANDIR
"/man"
6. F5调试。在..\postgresql-9.2.2\db\bin路径下执行psql –d postgres连接数据库,执行SQL命令
select pg_backend_pid(); 将返回的进程号对应的进程附加到调试程序中(必需在建立连接之后),设置所需的断点。在exec_simple_query()函数中设置断点,执行SQL语句来调试。
CREATE TABLE distributors (
did integer CHECK (did > 100),
name varchar(40)
);
INSERT INTO
distributors
VALUES(111,'HYL');
三、编译问题:
1、
..\postgresql-9.2.2\src\tools\msvc>
build DEBUG
Unable to determine Visual Studio version: The nmake version could not be determined. at src/tools/msvc/Mkvcbu
ild.pm line 63.
解决:
修改src\tools\msvc\Mkvcbuild.pm 文件第54行:
my $vsVersion = DetermineVisualStudioVersion();
修改后变为:
my $vsVersion;
修改src\tools\msvc\ VSObjectFactory.pm文件第26行,即增加如下命令(本机使用VS2010):
return new VS2010Solution(@_);
修改后变为:
my $visualStudioVersion = shift;
return new VS2010Solution(@_);
2、我按网上教程修改config_default.pl后出现无效的perl函数连接问,所以最好不要修改。
3、
创建库时,报错:loading system objects' descriptions ... FATAL: invalid byte sequence for encoding "UTF8": 0xb9
解决:之前的路径中存在中文,改成全英文的路径后问题消失,或者
initdb --locale=C dbtest。
4、按F5调试,直接退出。
解决:可能安装了pgAdmin客户端,那么右击对应服务器关闭服务即可。
5、执行psql –d postgres无法到连接数据库
解决:(1)可能安装了pgAdmin客户端,那么右击对应服务器关闭服务即可。
(2)没有启动服务进程。先F5调试,然后执行psql –d postgres连接数据库。