PostgreSQL使用笔记

工作很多年了,对数据库使用再也不是初整博客时的小白了。
比起MySQL来,PostgreSQL的配置着实是有些复杂,这篇文章记录一些我认为有用的部分

PostgreSQL的安装

1.apt即可

$ sudo apt update
$ sudo apt install postgresql

PostgreSQL的重要配置文件

1.pg_hba.conf 入口限制文件,列表形式,允许多条规则
一般的VPS,加入以下配置即可全放开

host    all             all             0.0.0.0/0               scram-sha-256

2.postgresql.conf 核心配置文件

# 数据文件的目录所在,一般配置去数据盘非系统盘,如
data_directory = '/data/postgresql/15/main'          # use data in another directory
# listen_addresses允许监听多个端口,如
listen_addresses = '127.0.0.1,192.168.0.1,192.168.0.2'
# 监听端口,用一个不常用的,如
port = 45376                            # (change requires restart)

PostgreSQL的数据初始化

为了修改默认数据的位置,除了在核心配置里修改目录以外,
还得在集群初始化的时候指定目录,做法如下:

# 查看集群:
pg_lsclusters

# 首先干掉默认的集群
pg_dropcluster --stop 13 main
# 这样直接就把启动脚本、数据库等等全干掉了

# 创建一个新的集群
pg_createcluster -U postgres -d /data/pgdata -e utf8 --start 13 main
# 不要再手动折腾initdb,centos的做法太落后了

PostgreSQL的用户权限

postgreSQL的权限真的很扯,角色用户一体化,反人类的思维
假设这里要创建一个用户uaser_a,拥有数据库a_database的权限,可以这样

# 创建一个角色user_a
CREATE ROLE uaser_a WITH LOGIN PASSWORD 'your_password_here';
# 创建一个数据库a_database,并指定user_a为owner
CREATE DATABASE a_database OWNER uaser_a;
# 先拒绝所有人的连接
REVOKE CONNECT ON DATABASE a_database FROM PUBLIC;
# 再允许uaser_a包含连接在内的所有权限
GRANT ALL PRIVILEGES ON DATABASE a_database TO uaser_a;

删除无用的PostgreSQL用户

首先得确定,你在干啥。

# 把权限从halo移给postgres
# REASSIGN OWNED BY halo TO postgres;
# 删除halo的所有权限
DROP OWNED BY halo;
# 删除halo
DROP USER halo;