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

     

  • 相关阅读:
    价格监测,如何锁定目标链接
    C/C++基于词频的文件相似度
    Vue工程化
    5.2 主机扫描:主机探测
    如何压缩图片的大小?这两个方法了解过吗
    计算机三级等级考试
    C语言基于AVL树实现简单的文件数据库
    SpringBoot入门
    SSE图像算法优化系列三十二:Zhang\Guo图像细化算法的C语言以及SIMD指令优化
    idea中遇到的一个问题
  • 原文地址:https://www.cnblogs.com/czx1/p/16303884.html