PostgreSQL(一) 编译安装运行

原创,如转发需注明出处。

多年没写博客,一直用的个人笔记软件,最近准备阅读PostgreSQL源码,故记录。(这两年PostgreSQL数据库在某些环境下是比较火的,原因想必大家都清楚。)

PostgreSQL是开放源码的数据库,支持Windows、Linux、Unix等多种操作系统。下面将会介绍PostgreSQL的编译、安装与运行。

一、Windows环境

1、环境准备

Windows10、Virtual Studio 2019社区版、PostgreSQL 14.3、MinGW(https://osdn.net/projects/mingw/downloads/68260/mingw-get-setup.exe)

MinGW安装后需要安装以下依赖包:

安装perl:https://strawberryperl.com/download/5.32.1.1/strawberry-perl-5.32.1.1-64bit.msi(注意配置环境变量)

修改文件编码,改成UTF-8 BOM编码,可以使用VS2019另存或者Notepad++修改:

       postgresql-14.3\src\fe_utils\print.c  和 postgresql-14.3\src\backend\access\brin\brin_bloom.c

避免出现如下类似错误:

“D:\postgresql-14.3\pgsql.sln”(默认目标) (1) ->
“D:\postgresql-14.3\postgres.vcxproj”(默认目标) (2) ->
(ClCompile 目标) ->
D:\postgresql-14.3\src\backend\access\brin\brin_bloom.c(1,1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicod
e 格式以防止数据丢失 [D:\postgresql-14.3\postgres.vcxproj]

然后打开:

进入D:\postgresql-14.3\src\tools\msvc目录,执行命令perl build.pl DEBUG,此处使用DEBUG是方便后面调试跟踪:

 编译完成后,可以执行:perl vcregress.pl check命令跑下测试。然后,执行perl install.pl D:\PostgreSQL\pg14 进行安装,需要保证安装目录已存在。

进入到pg安装目录:cd D:\PostgreSQL\pg14\bin,执行建库操作:initdb.exe -D ../data,建库完成后,启动pg数据库:pg_ctl.exe -D ../data -l logfile start,启动完成后进入数据库:psql.exe -d postgres,如下:

 接下来,即可通过VS2019 Attach到进程调试pgsql了,可以通过select pg_backend_pid();查询pid,也可以直接搜索进程名称。

 

 

二、Linux编译安装

1、编译
  tar zxvf postgresql-11.6.tar.gz
  ./configure --prefix=/home/cmdev/pgsql.11.6/
  编译make -j8 && make install
 
2、安装
  创建postgres用户
   groupadd postgres
   useradd -g postgres postgres
 
  设置安装目录和data目录权限
  chown -R postgres:root /home/zxcao/pgsql/data/
  chown -R postgres:root /home/cmdev/pgsql.11.6
 
  设置环境变量
  [postgres@kunpeng data]$ cat /home/postgres/.bash_profile
  export PGHOME=/home/cmdev/pgsql.11.6
  export PGDATA=/home/zxcao/pgsql/data
  export PATH=$PGHOME/bin:$PATH
  export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
  source /home/postgres/.bash_profile
 
  初始化数据库
  initdb -D /home/zxcao/pgsql/data
 
  启动数据库
   [postgres@kunpeng log]$ pwd
   /home/zxcao/pgsql/log
  [postgres@kunpeng log]$ pg_ctl -D /home/zxcao/pgsql/data/ -l logfile start
  查看端口是否已启动:netstat -nltp|grep 5432
 
  配置数据库允许连接
  #设置监听整个网络,查找“listen_addresses ”字符串,
  vim /home/zxcao/pgsql/data/postgresql.conf
   #修改为如下:
   listen_addresses = '*'
 
  #配置连接方式:
  vim /home/zxcao/pgsql/data/pg_hba.conf
   #修改为如下:
  host    all             all             192.168.2.0/24           md5

接下来,既可以通过gdb进行调试pgsql代码。

错误记录:

1、如果linux环境初始化数据库报错:
    initializing pg_authid ... FATAL:  wrong number of index expressions
    STATEMENT:  REVOKE ALL on pg_authid FROM public;
     child process exited with exit code 1
  解决方法:
  使用编译参数:CFLAGS='-DGCC_HASCLASSVISIBILITY -O0 -Wall -W'重新编译。参照:https://www.postgresql.org/message-id/17948.1365090217%40sss.pgh.pa.us
 
2、执行客户端psql命令报错
  [root@Centos6x64 bin]# ./psql
  psql: FATAL:  role "root" does not exist
分析及解决:
  这是PostgreSQL用户一个非常常见的错误,由于系统用户名和数据库用户名配置错误,这种情况正在发生。大多数Linux用户都试图使用root用户登录PostgreSQL,但实际上,这是错误的。需要成为安装PostgreSQL的操作系统用户才能创建第一个用户帐户。通常,默认用户名是Postgres,默认数据库也是Postgres。在Linux上安装PostgreSQL后,应该为Postgres用户设置密码,Postgres用户是PostgreSQL的默认超级用户,不要尝试使用任何其他默认的Linux或Unix系统用户名登录。
  1、设置默认Postgres用户的密码
      sudo passwd postgres
  2、使用"postgres"创建另一个角色
      创建新角色“dbrnd” -p =设置密码 -d = allow以创建数据库
      sudo -u postgres createuser dbrnd -d -P
 
3、psql插入语句报错
  ERROR:  column "czx" does not exist
  LINE 1: INSERT INTO test VALUES (1, "czx");
  原因:字符串要使用单引号。
 
4、运行createdb时报错
  createdb: could not connect to database postgres: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
  说明:服务器没有启动或者没有在createdb预期的地方启动。

 

posted @ 2022-05-23 23:27  追求沉默者  阅读(1269)  评论(0编辑  收藏  举报