百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

PostgreSQL安装(编译方式)

toyiye 2024-06-21 12:23 6 浏览 0 评论


官方安装文档:https://www.postgresql.org/docs/12/installation.html

一、环境


CentOS7.6Postgresql12.2


、操作系统环境配置


参考前面yum 安装方式文章 :


三、编译依赖包


可选软件包 :


1. 为了编译PL/Perl服务器端编程语言,需要完整Perl的安装,包括libperl库和头文件。

2. 为了编译PL/Python服务器端语言,需要一个包含头文件和distuils模块的Python安装。

3. 为了编译PL/Tcl服务器端语言,需要Tcl的安装。

4. 为了使用NSL,即具有使用不同于英语的一种语言显示消息的能力,需要一种Gettext API的实现。

5. 需要Kerberos, OpenSSL, OpenLDAP, and/or PAM,如果你想要使用这些服务支持认证或加密。

6. 为了编译PostgreSQL的文档,有一组独立的要求。


yum install systemtap systemtap-sdt-devel

yum install perl-ExtUtils-Embed

yum install readline readline-devel

yum install zlib zlib-devel

yum install openssl openssl-devel

yum install pam pam-devel

yum install libxml2 libxml2-devel

yum install libxslt libxslt-devel

yum install tcl tcl-devel

yum install openldap openldap-develyum install gcc-c++

yum install python python-devel

yum install python3 python3-devel

yum install gcc-c++


四、源代码下载


本文安装所使用的版本是12.2官方下载页面:可以使用下面命令直接wget


wget https://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gz


五、编译安装步骤


5.1 官方简要步骤,可用于测试环境


tar xvf postgresql-12.2.tar.gz

cd postgresql-12.2

./configure PREFIX=/usr/local/pgsql-12 #配置,生成makefile文件并指定安装目录

make && make install #make && make install

su - root #切换到root用户

useradd postgres #添加一个用户,添加完用户以后需要通过passwd postgres来修改该用户的密码

mkdir /usr/local/pgsql-12/data #新建一个目录,以后数据库的所有数据和操作都在该目录下

chown postgres.postgres /usr/local/pgsql-12/data #更改目录的所有者为 postgres

su - postgres #切换用户为postgres

/usr/local/pgsql-12/bin/initdb -D /usr/local/pgsql-12/data #初始化工作区

/usr/local/pgsql-12/bin/pg_ctl -D /usr/local/pgsql-12/data logfile start

/usr/local/pgsql-12/bin/createdb test #新建一个名为test 的数据库

/usr/local/pgsql-12/bin/psql test #打开客户端,连接到数据库服务器端


5.1 详细定制安装步骤


5.1.1 配置


/configure --prefix=/usr/local/pgsql-12 --with-pgport=5432 --with-perl --with-python PYTHON='/usr/bin/python3' --with-tcl --with-openssl --with-pam --without-ldap --with-libxml --with-libxslt --enable-thread-safety --with-wal-blocksize=16 --enable-dtrace --enable-debug


· 配置参数说明:下面参数依赖前面安装的依赖包,如果没有安装对应的依赖包会报错,感兴趣的同学可以不安装依赖包,然后找出每个选项对应的依赖包是什么。

参考:https://www.yuque.com/samyang-pey79/pschpn/postgresql-an-zhuang-bian-yi-fang-shi?inner=e16ca2fc


5.1.2 编译


Configure成功之后,执行编译:


make world


make world安装包含了文档,以及contrib下面的所有扩展


· contrib下面的扩展简介

参考:https://www.yuque.com/samyang-pey79/pschpn/postgresql-an-zhuang-bian-yi-fang-shi?inner=ba4e20bf

5.1.4 安装


带world参数可以安装PG的附属信息,如文档,帮助等


make install-world


六、安装后配置


6.1 添加操作系统用户


useradd postgres


6.2 环境变量配置


su - postgres

cat >>~/.pgsql_profile <<EOF

export PGHOME=/usr/local/pgsql-12

export PGDATA=/data/pgsql/12/data

export PATH=$PGHOME/bin:$PATH

export MANPATH=$PGHOME/share/man:$MANPATH

export LANG=en_US.utf8

export DATE=`date +"%Y-%m-%d %H:%M:%S"`

export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH

alias rm='rm -i'

alias ll='ls -lh'

export PGPORT=5432

export PGUSER=postgres

EOF

cat >>~/.bash_profile <<EOF

[ -f ~/.pgsql_profile ] && source ~/.pgsql_profile

EOF


6.3 自启动配置


CentOS7 将/etc/rc.d/rc.local的级别降低了 ,默认是启动不了一些服务的。通过ls -l 可以看到该文件没有执行权限。查看该文件内容,在英文注释部分已经有提示了。


#!/bin/bash

# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES

#

# It is highly advisable to create own systemd services or udev rules

# to run scripts during boot instead of using this file.

#

# In contrast to previous versions due to parallel execution during boot

# this script will NOT be run after all other services.

#

# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure

# that this script will be executed during boot.


可以按照提示给该文件添加执行权限,延续老的方式进行开机启动。


· 本文将按照新的方式,将postgresql 添加到系统服务里面开机启动,下面是启动脚本和添加方式。


# 配置启动脚本

cat >> /usr/lib/systemd/system/postgresql-12.service<<EOF

# It's nngkt recommended to modify this file in-place, because it will be

# overwritten during package upgrades. If you want to customize, the

# best way is to create a file "/etc/systemd/system/postgresql-12.service",

# containing

# .include /usr/lib/systemd/system/postgresql-12.service

# ...make your changes here...

# For more info about custom unit files, see

# http://fedoraproject.org/wiki/Systemd#How_do_I_customize_a_unit_file.2F_add_a_custom_unit_file.3F


# Note: changing PGDATA will typically require adjusting SELinux

# configuration as well.


# Note: do not use a PGDATA pathname containing spaces, or you will

# break postgresql-setup.

[Unit]

Description=PostgreSQL 12 database server

Documentation=https://www.postgresql.org/docs/12/static/

After=syslog.target

After=network.target


[Service]

Type=forking


User=postgres

Group=postgres


# Note: avoid inserting whitespace in these Environment= lines, or you may

# break postgresql-setup.


# Location of database directory

Environment=PGDATA=/data/pgsql/12/data/


# Where to send early-startup messages from the server (before the logging

# options of postgresql.conf take effect)

# This is normally controlled by the global default set by systemd

# StandardOutput=syslog


# Disable OOM kill on the postmaster

OOMScoreAdjust=-1000

Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj

Environment=PG_OOM_ADJUST_VALUE=0


ExecStart=/usr/local/pgsql-12/bin/pg_ctl start -D ${PGDATA} -s

ExecStop=/usr/local/pgsql-12/bin/pg_ctl stop -D ${PGDATA} -s -m fast

ExecReload=/usr/local/pgsql-12/bin/pg_ctl reload -D ${PGDATA} -s

KillMode=mixed

KillSignal=SIGINT


# Do not set any timeout value, so that systemd will not kill postmaster

# during crash recovery.

TimeoutSec=0


[Install]

WantedBy=multi-user.target

EOF

# 设置权限

chmod 754 /usr/lib/systemd/system/postgresql.service

# 设置开机启动

systemctl enable postgresql-12.service

# 启动、关闭、重启、查看状态

systemctl start|stop|restart|status postgresql-12.service

# 查看已设置自启动服务

systemctl list-units --type=service


6.4 数据库初始化


#创建目录并授权

mkdir -p /data/pgsql/12/data

chown -R postgres:postgres /data/pgsql

#初始化数据目录(添加 -k 选项,启用checksum)

/usr/local/pgsql-12/bin/initdb -D /data/pgsql/12/data -k


6.5 数据库启动关闭


# 启动

/usr/local/pgsql-12/bin/pg_ctl -D $PGDATA start

# 关闭

/usr/local/pgsql-12/bin/pg_ctl -D $PGDATA stop

# 重新加载配置文件

/usr/local/pgsql-12/bin/pg_ctl reload


6.6 创建数据库和用户


create user test with password 'test';

create database test owner test;


6.7 数据库连接


6.7.1 在postgres用户下直接psql 登录


默认在pg_hba.conf里面本机登录权限设置为trust ,是不需要输入密码的,如果是md5的验证方式则需要密码。详细可参考


如果在用户家目录下有 .pgpass 则不需要输入密码,直接psql -U用户名 就可以登录数据库。.pgpass需要 0600的权限:


cat >>~/.pgpass <<EOF

#hostname:port:database:username:password

localhost:5432:postgres:postgres:postgres

EOF

chmod 0600 ~/.pgpass


6.7.2 使用psql 远程登录


请使用 pgsql --help 查看使用帮助链接例子:


psql -h 192.168.1.10 -p 5432 -Upostgres -D postgres


6.7.3 使用编程语言链接


postgresql 相关的一些软件或者驱动 可参考[官方资料库] ()


6.7.3.1 JAVA


[java jdbc驱动] ()连接字符串:


`jdbc:postgresql://192.168.1.10:5432/test?currentSchema=test`


6.7.3.2 python


· 安装依赖包

pip install psycopg2-binary

· 简要操作案例

· #导入依赖包

· #!/usr/bin/python3

·

· import psycopg2

·

· #创建连接对象

· conn=psycopg2.connect(database="postgres",user="postgres",password="123456",host="localhost",port="5432")

· cur=conn.cursor() #创建指针对象

·

· # 创建表

· cur.execute("CREATE TABLE tb_user (id integer,name varchar,sex varchar);")

·

· #插入数据

· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(1,'Air','M'))

· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(2,'Tal','F'))

· cur.execute("INSERT INTO tb_user(id,name,sex)VALUES(%s,%s,%s)",(3,'Dal','M'))

·

· # 获取结果

· cur.execute('SELECT * FROM tb_user')

· results=cur.fetchall()

· print (results)

·

· # 关闭连接

· conn.commit()

· cur.close()

conn.close()

相关推荐

Asterisk-ARI对通道中的DTMF事件处理

Asterisk通道中关于DTMF处理是一个非常重要的功能。通过DTMF可以实现很多的业务处理。现在我们介绍一下关于ARI对通道中的DTMF处理,我们通过自动话务员实例来说明Asterisk如何创建一...

PyQt5 初次使用(pyqt5下载官网)

本篇文章默认已安装Python3,本篇文章默认使用虚拟环境。安装pipinstallPyQt5PyQt一些图形界面开发工具QtDesigner、国际化翻译工具Liguist需要另外...

Qt开发,使用Qt for Python还是Qt C++ Qt开发,使用Qt for

Qt开发使用QtforPython还是QtC++?1.早些年写过一个PyQt5的项目,最近几年重构成QtC++了,其中有个人原因,如早期代码写得烂,...

最简单方法!!用python生成动态条形图

最近非常流行动态条形图,在B站等视频网站上,此类视频经常会有上百万的播放量,今天我们通过第三方库:bar_chart_race(0.2版本)来实现动态条形图的生成;生成的效果如图:问题:...

Asterisk通道和ARI接口的通信(aau通道数)

Asterisk通道和ARI详解什么是通道Asterisk中,通道是介于终端和Asterisk自己本身的一个通信媒介。它包含了所有相关信息传递到终端,或者从终端传递到Asterisk服务器端。这些信...

Python GUI-长链转短链(长链接转化成短链接java)

当我们要分享某一个链接给别人,或是要把某个链接放入帖子中时,如果链接太长,则会占用大量空间,而且很不美观。这时候,我们可以结束长链转短链工具进行转换。当然可以直接搜索在线的网站进行转换,但我们可以借此...

Python 的hash 函数(python的hash函数)

今天在看python的hash函数源码的时候,发现针对不同的数据类型python实现了不同的hash函数,今天简单介绍源码中提到的hash函数。(https://github.com/pyth...

8款Python GUI开源框架,谁才是你的菜?

作为Python开发者,你迟早都会用到图形用户界面来开发应用。本文千锋武汉Python培训小编将推荐一些PythonGUI框架,希望对你有所帮助。1、Python的UI开发工具包Kivy...

python适合开发桌面软件吗?(python可不可以开发桌面应用软件)

其实Python/Java/PHP都不适合用来做桌面开发,Java还是有几个比较成熟的产品的,比如大名鼎鼎的Java集成开发环境IntelliJIDEA、Eclipse就是用Java开发的,不过PH...

CryptoChat:一款功能强大的纯Python消息加密安全传输工具

关于CryptoChatCryptoChat是一款功能强大的纯Python消息加密安全传输工具,该工具专为安全研究专家、渗透测试人员和红蓝队专家设计,该工具可以完全保证数据传输中的隐私安全。该工具建立...

为什么都说Python简单,但我觉得难?

Python普遍被大家认为是编程语言中比较简单的一种,但有一位电子信息的学生说自己已经学了C语言,但仍然觉得Python挺难的,感觉有很多疑问,像迭代器、装饰器什么的……所以他提出疑问:Python真...

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口

蓝牙电话-关联FreeSwitch中继SIP账号通过Rest接口前言上一篇章《蓝牙电话-与FreeSwitch服务器和UA坐席的通话.docx》中,我们使用开源的B2B-UA当中经典的FreeSWIT...

技术分享|Sip与WebRTC互通-SRProxy开源库讲解

SRProxy介绍目前WebRTC协议跟SIP协议互通场景主要运用在企业呼叫中心、企业内部通信、电话会议(PSTN)、智能门禁等场景,要想让WebRTC与SIP互通,要解决两个层面的...

全网第N篇SIP协议之GB28181注册 JAVA版本

鉴于网上大部分关于SIP注册服务器编写都是C/C++/python,故开此贴,JAVA实现也贴出分享GB28181定义了了基于SIP架构的视频监控互联规范,而对于多数私有协议实现的监控系统...

「linux专栏」top命令用法详解,再也不怕看不懂top了

在linux系统中,我们经常使用到的一个命令就是top,它主要是用来显示系统运行中所有的进程和进程对应资源的使用等信息,所有的用户都可以使用top命令。top命令内容量丰富,可令使用者头疼的是无法全部...

取消回复欢迎 发表评论:

请填写验证码