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安装后需要安装以下依赖包:

《PostgreSQL(一) 编译安装运行》

安装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]

然后打开:

《PostgreSQL(一) 编译安装运行》

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

《PostgreSQL(一) 编译安装运行》

 编译完成后,可以执行: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,如下:

《PostgreSQL(一) 编译安装运行》

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

《PostgreSQL(一) 编译安装运行》

 

 

二、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预期的地方启动。

 

    原文作者:追求沉默者
    原文地址: https://www.cnblogs.com/czx1/p/16303884.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞