首页 > 数据库 >Ubuntu下离线安装PostgreSQL

Ubuntu下离线安装PostgreSQL

时间:2024-04-14 19:12:03浏览次数:31  
标签:opt PostgreSQL amd64 ubuntu 离线 16.2 Ubuntu postgresql deb

  首先,我的环境是Ubuntu 20.04

  如果是在线安装,根据官网的介绍很简单

    # 安装包
    sudo apt update
    sudo apt install wget gnupg 
    # 导入仓库
    sudo sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
    # 导入秘钥
    sudo wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
    # 更新仓库并安装
    sudo apt update
    sudo apt -y install postgresql

  不过这种方式安装有个弊端,就是往往它安装的版本都比较旧(当前是PostgreSQL 12),如果要按照新版的PostgreSQL,那么就需要使用源码进行安装了

  注:为了方便使用,本文所编译的安装包也分享出来了,包括所需要的依赖,需要的可以去下载:

  地址链接:https://pan.baidu.com/s/14pkGp_GN32WUNUtXY9F-rA (提取码:3fvn)

  编译与安装

  PostgreSQL源码可以从官网下载,下载地址:https://www.postgresql.org/ftp/source/

  这里我采用PostgreSQL 16.2来安装:

  

  然后准备编译环境,根据官网的介绍(https://www.postgresql.org/docs/current/installation.html):

    # 安装编译环境(期间会选择时区,亚洲输入6,上海输入70)
    sudo apt update
    sudo apt install make gcc tar pkg-config libicu-dev libreadline-dev zlib1g-dev
    # 解压
    tar -zxf postgresql-16.2.tar.gz
    # 切换目录
    cd postgresql-16.2

  这里环境的按照一定要按照./configure提示来安装,缺少哪个就安装哪个  

    # 配置:--prefix表示存放编译后的文件目录
    sudo ./configure --prefix=/opt/postgresql-16.2
    # 编译
    sudo make
    # 安装
    sudo make install

  编译可能需要几分钟,执行完成之后,可以看到/opt/postgresql-16.2目录下的文件内容:

  

  现在我们可以把这整个目录打包一下,以后就可以把它直接发到服务器上去部署了:tar -zcf postgresql-16.2-bin.tar.gz -C /opt .

  那么怎么安装部署呢?

  我这里还是在Ubuntu20.04上安装部署,根据官网提示(https://www.postgresql.org/docs/16/install-make.html),我们这么来操作:

    # 解压到一个目录,比如我这里是/opt
    sudo tar -zxf postgresql-16.2-bin.tar.gz -C /opt
    # 创建数据目录
    sudo mkdir -p /opt/postgresql-16.2/data /opt/postgresql-16.2/logs
    # 创建用户(输入密码后一路回车)
    adduser postgres
    # 授权
    sudo chown postgres /opt/postgresql-16.2/data /opt/postgresql-16.2/logs
    # 切换用户
    su - postgres
    # 进行初始化
    sudo /opt/postgresql-16.2/bin/initdb -D /opt/postgresql-16.2/data
    sudo /opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data -l /opt/postgresql-16.2/logs/postgresql.log start
    sudo /opt/postgresql-16.2/bin/createdb test
    sudo /opt/postgresql-16.2/bin/psql test

  这里可能会报错,比如:/opt/postgresql-16.2/bin/initdb: error while loading shared libraries: libicuuc.so.66: cannot open shared object file: No such file or directory

  这个就是说缺少相关依赖导致的,这个提示就是说缺少icu相关的依赖,这样的话我们就需要按照它,一个简单的方法是去仓库找依赖包进行安装,我用的Ubuntu,所以我就去它的apt仓库找,地址:https://ubuntu.pkgs.org,找到之后把它下载下来,然后使用dpkg安装就好了,要完成初始化,需要的包有:  

    # 先去搜索下载这些包,或者按照下面的命令下载(Ubuntu20.04):
    # icu相关,需要搜索下载的包有:tzdata、libicu66、icu-devtools
    wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/icu-devtools_66.1-2ubuntu2_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu66_66.1-2ubuntu2_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/t/tzdata/tzdata_2019c-3ubuntu1_all.deb    
    # 接着使用dpkg进行安装
    sudo dpkg -i tzdata_2019c-3ubuntu1_all.deb
    sudo dpkg -i libicu66_66.1-2ubuntu2_amd64.deb
    dpkg -i icu-devtools_66.1-2ubuntu2_amd64.deb
    
    # readline相关,需要搜索下载的包有:libtinfo6、libncurses6、libncursesw6、libc6、libc-dev-bin、linux-libc-dev、
    # libcrypt-dev、libc6-dev、libncurses-dev、readline-common、libreadline8、libreadline-dev
    wget http://archive.ubuntu.com/ubuntu/pool/main/n/ncurses/libtinfo6_6.2-0ubuntu2_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/n/ncurses/libncurses6_6.2-0ubuntu2_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/n/ncurses/libncursesw6_6.2-0ubuntu2_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6-dev_2.31-0ubuntu9_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc6_2.31-0ubuntu9_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/g/glibc/libc-dev-bin_2.31-0ubuntu9_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/l/linux/linux-libc-dev_5.4.0-26.30_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxcrypt/libcrypt-dev_4.4.10-10ubuntu4_amd64.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/n/ncurses/libncurses-dev_6.2-0ubuntu2_amd64.deb    
    wget http://archive.ubuntu.com/ubuntu/pool/main/r/readline/readline-common_8.0-4_all.deb
    wget http://archive.ubuntu.com/ubuntu/pool/main/r/readline/libreadline8_8.0-4_amd64.deb    
    wget http://archive.ubuntu.com/ubuntu/pool/main/r/readline/libreadline-dev_8.0-4_amd64.deb    
    dpkg -i libtinfo6_6.2-0ubuntu2_amd64.deb
    dpkg -i libncurses6_6.2-0ubuntu2_amd64.deb
    dpki -i libncursesw6_6.2-0ubuntu2_amd64.deb
    dpkg -i libncursesw6_6.2-0ubuntu2_amd64.deb
    dpkg -i libc6_2.31-0ubuntu9_amd64.deb
    dpkg -i libc-dev-bin_2.31-0ubuntu9_amd64.deb
    dpkg -i linux-libc-dev_5.4.0-26.30_amd64.deb
    dpkg -i libcrypt-dev_4.4.10-10ubuntu4_amd64.deb
    dpkg -i libc6-dev_2.31-0ubuntu9_amd64.deb
    dpkg -i libncurses-dev_6.2-0ubuntu2_amd64.deb
    dpkg -i libreadline-dev_8.0-4_amd64.deb
    

  注意,有些包系统可能已经安装过了,那就不需要再安装了,可以跳过。    

    # 启动
    /opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data start
    # 停止
    /opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data stop
    # 重启
    /opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data restart
    # 查看状态
    /opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data status

  此外,为了方便程序启停,我们做一个服务单元(postgresql.service):  

    [Unit]
    Description=PostgreSQL
    After=network-online.target

    [Service]
    Type=forking
    WorkingDirectory=/opt/postgresql-16.2/bin
    PIDFile=/opt/postgresql-16.2/data/postgresql.pid
    User=postgres
    ExecStart=/opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data start
    ExecStop=/opt/postgresql-16.2/bin/pg_ctl -D /opt/postgresql-16.2/data stop
    Restart=always
    RestartSec=40s
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=postgresql
    PrivateTmp=true

    [Install]
    WantedBy=multi-user.target

  配置

  接着说下配置,首先,修改data/pg_hba.conf,本地连接不需要密码,允许所有的远程连接并且所有的远程连接需要密码:

  

    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    host    all             all             0.0.0.0/0               scram-sha-256

   修改data/postgresql.conf,主要是修改连接配置等:  

    # 绑定端口号
    listen_addresses = '*'
    # 时区(如果时区不对,那么使用postgresql时,像NOW()等函数可能不是北京时间)
    timezone = 'Asia/Shanghai'
    log_timezone = 'Asia/Shanghai'
    # 日志输出类型(stderr表示标准输出)
    log_destination = 'stderr'
    # 开启或者关闭日志输出(off是关闭)
    logging_collector = on
    # 日志文件所在的目录
    log_directory = '/opt/postgresql-16.2/logs'
    # 日志文件名的格式
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    # 日志轮换策略(30d表示30天生成一个日志文件)
    log_rotation_age = 30d
    # 日志轮换策略(100MB表示日志文件大小达到了这个限制就创建一个新日志文件)
    log_rotation_size = 100MB

   :如果在配置中修改了时区,重启后还不生效,那么我们可以手动改下就好了:

    # 显示当前时区
    SHOW timezone;
    # 设置时区
    SET TIMEZONE='Asia/Shanghai';
    # 修改某个数据库的时区
    ALTER DATABASE yourdb SET TIMEZONE='Asia/Shanghai';

  那么剩下的就是添加用户和授权了

  首先在本地连接PostgreSQL,前面已经在data/pg_hba.conf中配置本地连接不需要密码了,所以可以直接连接上:  

    # 切换到postgres用户
    su - postgres
    # 登录
    /opt/postgresql-16.2/bin/psql
    # 添加用户
    CREATE USER root WITH PASSWORD '123456';
    # 授权
    GRANT CONNECT ON DATABASE test TO root;
    # 授权超管
    ALTER USER root WITH SUPERUSER;

  连接数据

   我们可以使用命令行连接,比如:  

    # 使用命令行连接
    /opt/postgresql-16.2/bin/psql -h localhost -p 5432 -U root -d test -W 123456
    # 如果是本地,可以不需要密码直接连接(因为我们有配置)
    /opt/postgresql-16.2/bin/psql -h localhost -p 5432 -U root -d test -w

  其实官方还给我们提供了一个网页版的连接工具:pgAdmin4,你可以选择去官网下载安装:https://www.pgadmin.org/download/

  但是个人推荐使用容器化来安装部署!

  先获取镜像:sudo docker pull dpage/pgadmin4

  然后构建一个docker-compose.yml:

    version: '2'
    services:
      pgadmin:
        image: dpage/pgadmin4
        container_name: pgadmin
        restart: always
        ports: 
          - 8081:8081
        environment:
          PGADMIN_DEFAULT_EMAIL: [email protected]
          PGADMIN_DEFAULT_PASSWORD: 123456
          PGADMIN_LISTEN_ADDRESS: 0.0.0.0
          PGADMIN_LISTEN_PORT: 8081
          GUNICORN_LIMIT_REQUEST_LINE: 0
    PGADMIN_DEFAULT_EMAIL:pgAdmin4页面登录的用户名
    PGADMIN_DEFAULT_PASSWORD:pgAdmin4页面登录密码
    PGADMIN_LISTEN_ADDRESS:pgAdmin4绑定地址,建议0.0.0.0
    PGADMIN_LISTEN_PORT:pgAdmin4绑定的端口
    GUNICORN_LIMIT_REQUEST_LINE:请求长度限制,0表示不限制

   然后启动docker compose up -d,然后可以在web页面访问宿主机的8081端口就可以访问pgAdmin也页面了

  

标签:opt,PostgreSQL,amd64,ubuntu,离线,16.2,Ubuntu,postgresql,deb
From: https://www.cnblogs.com/shanfeng1000/p/18134306

相关文章

  • ubuntu Linux kernel升级导致英伟达显卡驱动失效
    Linuxkernel升级导致英伟达显卡驱动失效报错nvidia-smiNVIDIA-SMIhasfailedbecauseitcouldnotcommunicatewiththeNVIDIAdriver.MakesurethatthelatestNVIDIAdriverisinstalledandrunning.#或者nvidia-smiNvidiaNVMLDriver/libraryversionmisma......
  • Ubuntu 启用交换分区
    前言交换分区也称之为swap分区,允许系统在内存不足的情况下将内存程序写入文件,防止系统卡死失去响应的情况发生。检查现有交换分区首先,确认系统中是否已存在交换分区或文件。在终端中输入以下命令:swapon--showfree-hswapon--show命令会列出当前已启用的交换空间。fr......
  • Ubuntu18.04安装opensips一次过,实现sip语音视频通话
    安装方式apt命令安装,不建议使用此方式想要在ubuntu18.04(建议使用18.04,不出错)上通过apt命令安装的可以借鉴一下这篇文章,但是这篇文章中博主有错误并未解决,下面是解决方式执行下列命令,使用opensipsdbctl创建数据库的时候会报错opensipsdbctlcreate#错误信息为ERROR:......
  • ubuntu22 安装3090驱动
    1.执行nvidia-smi-a查询显卡资源报错aptinstallnvidia-utils-535-serveraptinstallnvidia-utils-5352.安装驱动nvdia-smi提示未安装驱动预先安装系统:ububtu22.04LTS查看可安装驱动版本:#ubuntu-driversdevicesERROR:root:aplaycommandnotfound==/sys/devices/pci000......
  • windows mstsc 远程连接Ubuntu
    通常使用windows的远程桌面连接功能,可以连接Windows机器,但能不能连接Linux呢,答案是可以的。近日尝试用mstsc连接Ubuntu系统,连接成功了,小记一下。本人Linux安装方式:VMWareWorkstation,版本:Ubuntu18.04方法如下:登录Ubuuntu桌面环境,打开浏览器,登录网站下载《xrdp-installer-1.......
  • ubuntu 安装 Allure
    试了网上好多种方法都不行,各种AI都问遍了,全都是安装上了但是allure--version的时候没有找到!!!最后这个终于可以了!!! 更新系统软件包列表:bash复制代码运行sudoaptupdate安装Java(JDK8或更高版本):bash复制代码运行sudoaptinstallopenjdk-11-jdk下载Allure命令行工......
  • 在ubuntu22.04中使用阿里云镜像站安装docker(官方安装太慢)
    在Ubuntu22.04上安装docker,略有不同。安装一些依赖。sudoaptupdatesudoaptinstallapt-transport-httpsca-certificatescurlgnupglsb-releaseBash在国内的网络环境下,如果使用官方的源来安装docker,下载安装包的过程就非常慢,所以这里使用阿里云源安装添加阿......
  • 从Oracle迁移到PostgreSQL的十大理由
    从Oracle迁移到PostgreSQL的十大理由PostgreSQLChina官方微信:开源软件联盟PostgreSQL分会 19人赞同了该文章作者:保罗·纳穆格PaulNamuag能够担任各种职务,受益于在过去的18年中有机会使用各种技术。他从2005年开始担任图形艺术家和MS.Net开发人员......
  • Ubuntu上安装Docker
    安装docker流程1、添加Docker官方仓库首先,您需要添加Docker官方仓库以获取最新的Docker软件包。在终端中执行以下命令:sudoaptupdatesudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-commoncurl-fsSLhttps://download.docker.com/linux/u......
  • [离线技巧] 整体二分
    来介绍一下整体二分。整体二分需要满足一下条件:问题之间独立可以离线具有单调性答案贡献可合并我们通过几个例子,通俗的理解这个算法。问题\(1\)给定\(n\)个数,求第\(k\)小。我们思考这个问题怎么做。不用排序,显然,答案具有单调性。那么,我们可以二分一个答案,判断......