PostgreSQL

发布于:2025-02-24 ⋅ 阅读:(11) ⋅ 点赞:(0)

目录

一、PostgreSQL基础信息

二、PostgreSQL的安装

三、PostgreSQL的配置

1、远程连接配置

2、数据库日志配置

四、PGSQL基本操作

五、图形化界面安装使用

六、数据类型


一、PostgreSQL基础信息

  1. 特点:

    1. 支持标准SQL语法。

    2. 提供事务(ACID)完整性。

    3. 支持多种数据类型(如JSON、XML、数组等)。

    4. 内置地理空间数据支持(PostGIS扩展)。

    5. 高度可扩展,支持自定义函数、存储过程和扩展模块。

  2. 应用场景:

    1. 适用于需要复杂查询和高并发的应用场景。

    2. 数据仓库和商业智能分析。

    3. 地理信息系统(GIS)开发。

    4. Web应用程序后端数据库。

  3. 优势:

    1. 开源且免费。

    2. 社区活跃,更新频繁。

    3. 跨平台支持(Linux、Windows、macOS等)。

    4. 安全性高,支持加密连接和细粒度权限控制。

二、PostgreSQL的安装

进入官网选择安装系统,建议使用Linux安装

选择PGSQL版本,目前推荐使用12版本(尽量使用稳定的版本)

 会自动生成安装命令,确保服务器可以连接外网就可以进行下一步安装了。

# 下载PGSQL的rpm包
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 安装PGSQL12的软件程序
sudo yum install -y postgresql12-server
# 数据库初始化
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
# 设置开启启动项,并设置为开启自行启动
sudo systemctl enable postgresql-12
# 启动PGSQL
sudo systemctl start postgresql-12

PostgreSQL不推荐使用root管理,在安装成功postgreSQL后,他默认会给你创建一个用户:postgres

玩PGSQL前,先切换到postgres

su postgres

三、PostgreSQL的配置

配置文件存放在这个目录下(注意:可以看到配置文件属于postgres,使用postgres账号进行配置设置,避免出现问题)

/var/lib/pgsql/12/data

1、远程连接配置

PostgreSQL默认情况下不支持远程连接的,与MySQL一样。

修改pg_hba.conf配置文件,支持远传连接。

local:代表本地连接,host代表可以指定连接的ADDRESS

database编写数据库名,如果写all,代表所有库都可以连接

user编写连接的用户,可以写all,代表所有用户

address代表那些IP地址可以连接 method加密方式,这块不用过多关注,直接md5

例如: host all all 0.0.0.0/0 md5

为了远传连接还需要对服务级别进行修改

服务级别的配置在postgresql.conf

默认:

修改为:

 

为了确保配置生效,重启数据库

# postgres密码不管,直接root用户
sudo systemctl restart postgresql-12

2、数据库日志配置

postgreSQL默认情况下,只保存7天的日志,循环覆盖。

以下是配置说明

# 代表日志是开启的。
logging_collector = on
# 日志存放的路径,默认放到当前目录下的log里
log_directory = 'log'
# 日志的文件名,默认是postgresql为前缀,星期作为后缀
log_filename = 'postgresql-%a.log'
# 默认一周过后,日志文件会被覆盖
log_truncate_on_rotation = on
# 一天一个日志文件
log_rotation_age = 1d
# 一个日志文件,没有大小限制
log_rotation_size = 0

四、PGSQL基本操作

切换到postgres用户后,直接输入psql即可进入到postgreSQL提供的客户端

create user默认有连接权限,create role没有,不过可以基于选项去设置

例如:

create user root with SUPERUSER PASSWORD 'root';

退出命令行:

\q

使用刚刚创建的root用户进行登录(新安装数据库,没有建库创建用户无法登录)

psql -h 192.168.11.32 -p 5432 -U root -W

创建数据库

create database root;

切换到数据库

\c root

查看用户信息

\du

PGSQL逻辑结构(了解结构可以更好地进行权限配置)

server、cluster、tablespace级别:这个级别一般是基于pg_hba.conf去配置

database级别:通过命令级别操作,grant

namespace、schema级别:很少根据这个级别进行设置

对象级别:通过grant命令去设置

# 查看grant命令
\help grant

 踩坑:

-- 准备用户
create user xxx with password 'xxx';
-- 准备数据库
create database xxx;
-- 切换数据库
\c xxx;
-- 构建
schemacreate schema xxx;
-- 将schema的拥有者修改为xxx用户
alter schema xxx owner to xxx;
-- 将xxx库下的xxx的schema中的表的增,改,查权限赋予给xxx用户
grant select,insert,update on all tables in schema xxx to xxx;
-- 用postgres用户先构建一张表
create table xxx.test(id int);
-- 切换到xxx用户。
\c xxx -xxx 
-- 报错:
-- 致命错误:  对用户"-xxx"的对等认证失败
-- Previous connection kept
-- 上述方式直接凉凉,原因是匹配连接方式时,基于pg_hba.conf文件去从上往下找
-- 找到的第一个是local,匹配上的。发现连接方式是peer。
-- peer代表用当前系统用户去连接PostgreSQL
-- 当前系统用户只有postgres,没有xxx,无法使用peer连接
-- 想构建xxx用户时,发现postgreSQL的所有文件拥有者和所属组都是postgres,并且能操作的只有拥有者
-- 采用远程连接。
psql -h 192.168.11.32 -p 5432 -U laozheng -W
-- 这样依赖,跳过了local链接方式的匹配,直接锁定到后面的host,host的连接方式是md5,md5其实就是密码加密了。
-- 登录后,直接输入
\dn
-- 查看到当前database下有两个schema

五、图形化界面安装使用

使用命令行太麻烦了,官方提供了免费的工具(使用其他工具也可以)

官方提供的:pgAdmin - PostgreSQL Tools

直接点击就可以下载~~~

https://www.postgresql.org/ftp/pgadmin/pgadmin4/v6.9/windows/

 

六、数据类型

PGSQL支持的类型特别丰富,大多数的类型和MySQL都有对应的关系,下面是简单的对比,已经熟练使用MySQL的小伙伴,可以更快上手PGSQL

名称 说明 对比MySQL
布尔类型 boolean,标准的布尔类型,只能存储true,false MySQL中虽然没有对应的boolean,但是有替换的类型,数值的tinyint类型,和PGSQL的boolean都是占1个字节。
整型 smallint(2字节),integer(4字节),bigint(8字节) 跟MySQL没啥区别。
浮点型 decimal,numeric(和decimal一样一样的,精准浮点型),real(float),double precision(double),money(货币类型) 和MySQL基本也没区别,MySQL支持float,double,decimal。MySQL没有这个货币类型。
字符串类型 varchar(n)(character varying),char(n)(character),text 这里和MySQL基本没区别。<br />PGSQL存储的varchar类型,可以存储一个G。MySQL好像存储64kb(应该是)。
日期类型 date(年月日),time(时分秒),timestamp(年月日时分秒)(time和timestamp可以设置时区) 没啥说的,和MySQL基本没区别。<br />MySQL有个datetime。
二进制类型 bytea-存储二进制类型 MySQL也支持,MySQL中是blob
位图类型 bit(n)(定长位图),bit varying(n)(可变长度位图) 就是存储0,1。MySQL也有,只是这个类型用的不多。
枚举类型 enum,跟Java的enum一样 MySQL也支持。
几何类型 点,直线,线段,圆………… MySQL没有,但是一般开发也用不到
数组类型 在类型后,追加[],代表存储数组 MySQL没有~~~
JSON类型 json(存储JSON数据的文本),jsonb(存储JSON二进制) 可以存储JSON,MySQL8.x也支持
ip类型 cidr(存储ip地址) MySQL也不支持~
等等 http://www.postgres.cn/docs/12/datatype.html