Postgresql之基础
Postgresql: https://www.postgresql.org/
[安装]
删除已经存在的pg:
yum remove -y postgresql* && rm -rf /var/lib/pgsql && rm -rf /usr/pgsql* && userdel -r postgres && groupdel postgres
yum:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql14-server
sudo /usr/pgsql-14/bin/postgresql-14-setup initdb # 初始化数据库
sudo systemctl enable postgresql-14
sudo systemctl start postgresql-14
Docker:
这里使用docker-compose.yml
version: '3'
services:
pgsql:
image: postgres:14.2
container_name: pg14
restart: unless-stopped
environment:
POSTGRES_PASSWORD: 123456
TZ: Asia/Shanghai
ports:
- 5432:5432
volumes:
- ./data:/var/lib/postgresql/data
privileged: true
启动服务
docker exec -it pg14 psql -U postgres -d postgres
编译安装(生产环境推荐)
-- 下载源码包
wget https://ftp.postgresql.org/pub/source/v14.2/postgresql-14.2.tar.gz --no-check-certificate
wget https://ftp.postgresql.org/pub/source/v13.3/postgresql-13.3.tar.gz
wget https://ftp.postgresql.org/pub/source/v12.7/postgresql-12.7.tar.gz
wget https://ftp.postgresql.org/pub/source/v11.12/postgresql-11.12.tar.gz
wget https://ftp.postgresql.org/pub/source/v10.17/postgresql-10.17.tar.gz
wget https://ftp.postgresql.org/pub/source/v9.6.22/postgresql-9.6.22.tar.gz
wget https://ftp.postgresql.org/pub/source/v9.4.26/postgresql-9.4.26.tar.gz -- 一些依赖包
yum install -y cmake make gcc zlib zlib-devel gcc-c++ perl readline readline-devel \
python36 tcl openssl ncurses-devel openldap pam flex -- 创建用户
useradd pgsql
echo "lhr" | passwd --stdin pgsql -- 创建目录
mkdir -p /postgresql/{pgdata,archive,scripts,backup,pg14,soft}
chown -R pgsql:pgsql /postgresql
chmod -R 775 /postgresql -- 编译
su - pgsql
cd /postgresql/soft
tar zxvf postgresql-14.2.tar.gz
cd postgresql-14.2
./configure --prefix=/postgresql/pg14
make -j 16 && make install
# 编译完成,最后一行显示:All of PostgreSQL successfully made. Ready to install. -- 如果你希望编译所有能编译的东西,包括文档(HTML和手册页)以及附加模块(contrib),这样键入:
make world -j 16 && make install-world
#最后一行显示:PostgreSQL, contrib, and documentation successfully made. Ready to install.
-- 源码安装postgresql时,而make时又没有make world,就会导致的pg最终没有类似pg_stat_statements的扩展功能 -- 配置环境变量
cat >> ~/.bash_profile <<"EOF"
export PGPORT=5432
export PGDATA=/postgresql/pgdata
export PGHOME=/postgresql/pg14
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PATH=$PGHOME/bin:$PATH:.
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres
EOF source ~/.bash_profile -- 初始化
su - pgsql
/postgresql/pg14/bin/initdb -D /postgresql/pgdata -E UTF8 --locale=en_US.utf8 -U postgres -- 修改参数
cat >> /postgresql/pgdata/postgresql.conf <<"EOF"
listen_addresses = '*'
port=5432
unix_socket_directories='/postgresql/pgdata'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOF cat > /postgresql/pgdata/pg_hba.conf << EOF
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 md5
EOF -- 启动
su - pgsql
pg_ctl start
pg_ctl status
pg_ctl stop -- 配置系统服务
cat > /etc/systemd/system/PG14.service <<"EOF"
[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network.target [Service]
Type=forking
User=pgsql
Group=pgsql
Environment=PGPORT=5433
Environment=PGDATA=/postgresql/pgdata
OOMScoreAdjust=-1000
ExecStart=/postgresql/pg14/bin/pg_ctl start -D ${PGDATA} -s -o "-p ${PGPORT}" -w -t 300
ExecStop=/postgresql/pg14/bin/pg_ctl stop -D ${PGDATA} -s -m fast
ExecReload=/postgresql/pg14/bin/pg_ctl reload -D ${PGDATA} -s
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0 [Install]
WantedBy=multi-user.target
EOF systemctl daemon-reload
systemctl enable PG14
systemctl start PG14
systemctl status PG14 su - pgsql
psql
\password postgres
or:
alter user postgres with password 'lhr'; -- 安装插件
create extension pageinspect;
create extension pg_stat_statements; select * from pg_extension ;
select * from pg_available_extensions order by name;
编译参数介绍:
--with-pgport=NUMBER
把NUMBER设置为服务器和客户端的默认端口。默认是 5432。这个端口可以在以后修改,不过如果你在这里声明,那么服务器和客户端将有相同的编译好了的默认值。这样会非常方便些。通常选取一个非默认值的理由是你企图在同一台机器上运行多个PostgreSQL服务器。--with-openssl
编译SSL(加密)连接支持。这个选项需要安装OpenSSL包。configure将会检查所需的头文件和库以确保你的 OpenSSL安装足以让配置继续下去。--with-perl
制作PL/Perl服务器端编程语言。--with-python
制作PL/Python服务器端编程语言。--with-blocksize=BLOCKSIZE
设置块尺寸,以 K 字节计。这是表内存储和I/O的单位。默认值(8K字节)适合于大多数情况,但是在特殊情况下可能其他值更有用。这个值必须是2的幂并且在 1 和 32 (K字节)之间。注意修改这个值需要一次 initdb。--with-systemd
系统服务方式管理
更多编译选项请参考:http://postgres.cn/docs/13/install-procedure.html

[使用]
在默认配置下, 之允许本机访问Postgresql
# 切换到postgres用户
su - postgres Last login: Wed Mar 1 13:16:48 CST 2017 on pts/1
-bash-4.2$ psql psql (9.2.18)
Type "help" for help. postgres=# 此时就在数据库postgres中了。
创建新用户:
create user dbuser with password '密码';
注意点: 密码要使用单引号
修改postgres密码
alter user postgres with encrypted password '密码';
创建用户数据库:
create database demo owner dbuser;
赋权给用户
postgres=# GRANT ALL PRIVILEGES ON DATABASE demo TO dbuser;
注意:这里跟MySQL不同 是需要使用关键字DATABASE
开启远程访问:
配置文件:/var/lib/pgsql/data/postgresql.conf
listen_addresses = '0.0.0.0'
更多:
cat >> /var/lib/pgsql/14/data/postgresql.conf <<EOF
listen_addresses = '*'
port=5432
unix_socket_directories='/var/lib/pgsql/14/data'
logging_collector = on
log_directory = 'pg_log'
log_filename = 'postgresql-%a.log'
log_truncate_on_rotation = on
EOF
/var/lib/pgsql/data/pg_hba.conf
添加/修改:允许任意用户从任意机器上以密码方式访问数据库,把下行添加为第一条规则: host all all 0.0.0.0/0 md5
更多:
cat > /var/lib/pgsql/14/data/pg_hba.conf << EOF
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 trust/md5
EOF
trust: 相当于免密登录
设置md5即可
重启服务:
sudo systemctl restart postgresql
数据库备份:
/usr/pgsql-9.6/bin/pg_dump -h 127.0.0.1 -U rw -d test > pgsql-20220819.sql 将整个库进行备份导出
开启防火墙端口:
firewall-cmd --add-port=5432/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
常用命令:
# 查看所有用户及权限
\du
# 退出
\q
# 进入数据库
\d dbname
cli链接:
psql -U lanlang -h 120.xx.xx.xxx -d postgres
-U: 指定用户名
-h: 链接地址
-d: 指定认证数据库
之后 输入密码即可登录
-- 从Postgresql 9.2开始,还可以使用URI格式进行连接:psql postgresql://myuser:mypasswd@myhost:5432/mydb
psql postgresql://postgres:lhr@192.168.66.35:25432/postgres
# 创建数据库
CREATE DATABASE dbname WITH OWNER=postgres ENCODINT='UTF-8';
# 创建表
create table student (
id integer not null,
name character(32),
number char(5),
constraint student_pkey primary key (id)
);
常见问题:
程序链接PostgreSQL 时报错"no pg_hba.conf entry"
这条错误的原因是因为客户端远程访问postgresql受限所致,因为postgresql默认情况下除本机外的机器是不能连接的。
默认情况下,postgresql本机的连接是信任连接,只要有用户名就可以连接,不用密码. 要改变这种默认设置需要更改postgresql安装目录下的两个配置文件(pg_hba.conf与postgresql.conf)
##Added by liu.chunming
local all all peer
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
联接使用的认证方法:
trust
无条件地允许联接。这个方法允许任何可以与PostgreSQL数据库服务器联接的用户以他们期望的任意PostgreSQL 数据库用户身份进行联接,而不需要口令。
md5
要求客户端提供一个 MD5 加密的口令进行认证。
如果我想让10.86.12.0~10.86.12.154的IP段能访问PostgreSQL 数据库,需要增加下面一行:
host all all 10.86.12.0/24 trust
文档参考:
Postgresql之基础的更多相关文章
- postgresql架构基础(转)-(1)
PostgreSQL使用一种客户端/服务器的模型.一次PostgreSQL会话由下列相关的进程(程序)组成: 一个服务器进程,它管理数据库文件.接受来自客户端应用与数据库的联接并且代表客户端在数据库上 ...
- PostgreSQL的基础数据类型分析记录-转
src:http://www.codeweblog.com/postgresql%E7%9A%84%E5%9F%BA%E7%A1%80%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E ...
- PostgreSQL注入基础
一般注入多用于在mssql和mysql两类数据库中,如mssql+asp.mysql+php则是最为常见的搭配环境.不同的网站应用的数据库也大不一样,根据数据库的处理能力.负载等多重因素决定.本文主要 ...
- Linux安装postgresql及基础操作
安装环境说明 系统环境说明 [root@slave1 ~]# cat /etc/redhat-release CentOS Linux release 7.4.1708 (Core) [root@sl ...
- PostgreSQL基础知识与基本操作索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 luckyjackgao@gmail.com 本页记录所有本人所写的PostgreSQL的基础知识和基本操作相关文摘和 ...
- PostgreSQL高可用性、负载均衡、复制与集群方案介绍
目录[-] 一.高可用性.负载均衡.复制的几个方案比较: 二.多节点集群方案比较 9.3官方文档(中文):http://58.58.27.50:8079/doc/html/9.3.1_zh/high- ...
- PostgreSQL与PostGIS的关系
PostgreSQL相当于PostGIS的祖先,PostGIS是在PostgreSQL的基础上发展起来的,从它们的名字上也能看出些许端倪.PostgreSQL是一个开源数据库,而PostGIS在此基础 ...
- Linux基于Hadoop2.8.0集群安装配置Hive2.1.1及基础操作
前言 安装Apache Hive前提是要先安装hadoop集群,并且hive只需要在hadoop的namenode节点集群里安装即可,安装前需保证Hadoop已启(动文中用到了hadoop的hdfs命 ...
- PL/Proxy介绍
PL/Proxy 介绍 一.概述 1.PL/Proxy 是一个采用PL Language语言的数据库分区系统. 目的:轻松访问分区数据库 它的理念是代理远程函数体内指定.函数调用同样标签创建的函数,所 ...
- postgres 正则表达式
PostgreSQL正则表达式 基础: Operator Description Example ~ Matches regular expression, case sensitive 'thoma ...
随机推荐
- 学习高校课程-软件设计模式-软件设计原则(lec2)
Feature of Good Design (1) 优秀设计的特点(一) Code reuse 代码复用 – Challenge: tight coupling between components ...
- Windows自动更新hosts(bat脚本方式)
为了解决无法打开 github 网页的问题,才有了这个自动更新hosts 的命令脚本 hosts 里的内容会每日更新,内容从这里拿 文件:https://raw.hellogithub.com/hos ...
- for循环遍历的盗版笔记
遍历一个List有如下几种方法 5 6 是 java8 增强for循环底层由Iterator实现 增强for的出现时替代迭代器的,所以在遍历集合或者遍历数组就可以使用增强for去完成 增强for循 ...
- golang的类型转换
今天我们来说说一个大家每天都在做但很少深入思考的操作--类型转换. 本文索引 一行奇怪的代码 go的类型转换 数值类型之间互相转换 unsafe相关的转换 字符串到byte和rune切片的转换 sli ...
- 在windows下安装Composer(转载)
在windows下安装Composer Composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer ...
- thinkphp中的or,like,in等联合查询
数据库中的两个字段有一个字段等于查询条件时,下面两个方法都是可以的: (1) $where['a.goods_name|a.goods_sn'] = array('like',"%$keyW ...
- 数据库周刊33丨腾讯Tbase新版本发布;“2020数据技术嘉年华”有奖话题遴选;阿里云技术面试题;APEX 实现数据库自动巡检;MYSQL OCP题库……
摘要:墨天轮数据库周刊第33期发布啦,每周1次推送本周数据库相关热门资讯.精选文章.干货文档. 热门资讯 1.中国移动国产OLTP数据库中标公告:南大金仓阿里,万里开源中兴 分获大单[摘要]近日,中国 ...
- python中队列deque的使用
队列,堆栈是程序开发中常用的两种数据存储模型.python中队列怎么运用呢?以下内容介绍了队列的使用和队列的函数. from collections import deque q = deque() ...
- Kubernetes 升级不弃 Docker:KubeKey 的丝滑之道
作者:尹珉,KubeSphere Ambaasador&Contributor,KubeSphere 社区用户委员会杭州站站长. 引言 随着 Kubernetes 社区的不断发展,即将迎来 K ...
- 混合云下的 Kubernetes 多集群管理与应用部署
本文是上海站 Meetup 中讲师李宇根据其分享内容梳理成的文章 大家好,很高兴来到今天下午的 Meetup.我先简单做个自我介绍,我叫李宇,目前是 KubeSphere 的一名研发,主要负责多集群方 ...