SZU 数据库内核与实现
示例环境:WSL2 Ubuntu20.04
Postgresql 版本:12.5
通过git 获取最新版PostgreSQL
git clone https://github.com/postgres/postgres.git
cd postgres
git checkout -b test
安装PostgreSQL所需的依赖包
sudo apt-get install build-essential
下载压缩包
cd ~
wget https://raw.fastgit.org/Miigon/pgdev-zip/master/PGDev.zip -O PGDev.zip
安装所需要的包
sudo apt-get install unzip libreadline-dev zlib1g.dev gdb
解压,创建文件夹
unzip PGDev.zip
cd PGDev/
mkdir pghome
mkdir data
编辑env-debug文件,配置环境变量
vim env-debug
```
PGHOME=~/PGDev/pghome
export PGDATA=$PGHOME/../data
export PGHOST=127.0.0.1
export PGPORT=5432
export LD_LIBRARY_PATH=$PGHOME/lib
export PATH=$PGHOME/bin:$PATH
```
source env-debug
#每次重启终端都要source
执行configure
cd postgres-12.5/
./configure --prefix=$PGHOME
移除代码优化,并添加调试信息
#找到-O2,替换成-g
CFLAGS = -g
CXXFLAGS = -g
make安装
make -j4
make install
#清除信息,make clean
初始化数据库
initdb
启动数据库
pg_ctl start
#pg_ctl stop
创建数据库,并导入数据,连接数据库
createdb testdb
psql -f "../sqls/beer.sql" testdb
psql testdb
打开Vscode连上WSL, 打开PGDev文件夹
配置文件
选择[Run]-[Add Configuration],在launch.json
中添加以下信息
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 附加",
"type": "cppdbg",
"request": "attach",
"program": "/home/destiny/PGDev/pghome/bin/postgres",
"processId": "${command:pickProcess}",
"MIMode": "gdb",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
在VSCode你需要调试的位置添加断点
在Windows Terminal连上Ubuntu20.4(数据库已启动)
psql testdb
testdb#select pg_backend_pid()
pg_backend_pid
--------------
666
(1 row)
切回VScode,在侧边栏[Run and Debug],选择gdb(附加)
,点,输入刚才获取的pid
在psql输入sql语句,在VSCode就可以看到调试信息了。