PostgreSQL 部署
PostgreSQL 部署
安装
sudo apt install postgresql
安装完成后,会自动注册一个 postgres
的用户,用于支持 PostgreSQL 的本机免密登录。
此外,PostgreSQL 的配置文件存储在 /etc/postgresql/15/main
下,其中 15 是版本号。
配置公网访问
由于我将 PostgreSQL 部署在服务器上,因此我需要放行除本机之外的其他 IP 的访问。
本地修改
先把postgresql服务停止。
sudo systemctl stop postgresql
- 进入目录
/etc/postgresql/15/main
-
修改文件postgresql.conf
listen_addresses = '*' # what IP address(es) to listen on;
-
修改文件pg_hba.conf
host all all 192.168.88.198/32 md5 host all all 0.0.0.0/0 md5
第一种格式:host all all 192.168.88.198/32 md5
可以设置指定ip连接到数据库服务上。
第二种格式:host all all 0.0.0.0/0 md5
任意外部ip都可访问到数据库服务。
上述方式选择其一即可。
-
重启postgresql服务
sudo systemctl start postgresql
- 成功解决问题。
配置文件格式解释
host all all 192.168.88.198/32 md5
host all all 0.0.0.0/0 md5
语法
local <dbname> <user> <auth-method> [auth-options]
host <dbname> <user> <ip/masklen> <auth-method> [auth-options]
服务器放行端口
PostgreSQL 默认使用的端口是 5432,采用TCP协议。配置完成后无需重启服务器。
使用
常用指令
\l
:列出当前所有的数据库。\du
:列出所有用户及其权限。\dt
:列出当前数据库中的所有表。\dp
:列出当前数据库中的所有表的所有权限信息\d
:列出指定表结构。\c
:连接到另一个数据库,相当于 MySQL 的use
。\q
:退出 PostgreSQL 命令行客户端。\?
:获取帮助信息,列出可用的 psql 命令及其用法。
登录
默认使用的用户是 postgres
,这里由于默认设置了身份验证要求登录 PostgreSQL 的用户名和当前系统用户名要一致,因此要先切换到该用户:
sudo -i -u postgres
psql
或者直接一条命令解决:
psql -U postgres -d 要使用的数据库 -h 服务器IP -p 5432
不指定要使用的数据库也可以
创建用户并授权
PostreSQL 的默认配置是自动创建一个 postgres
用户,该用户有完全的 superadmin
超管权限,可以管理系统中整个 PostgreSQL
实例。但是这个 postgres
用户仅是用于运行 PostgreSQL 数据库服务的,不能用于登录系统(即没有登录 shell,其登录 shell 被设置成 /bin/false
或 /usr/sbin/nologin
,也没有家目录)
示例:创建一个 new_user
用户并授权
-
以超级管理员
postgres
身份登录数据库$ psql -U postgres -h 服务器IP -p 5432
-
创建新用户
create user new_user with password '123456';
-
为新用户授权
grant connect on database test to new_user; # 连接权限 grant all privileges on database test to new_user; # 数据库test的所有权限 grant all privileges on all tables in schema public to new_user; # 数据库test中所有表的操作权限
-
其他用户管理操作
alter user new_user password '654321'; # 修改用户密码