基础
切换用户至 posgres
进入数据库交互式命令行:
sudo -u postgres psql
在 bash 中输入以下命令操作数据库
要求当前登录用户是 postgre
# 创建数据库
createdb [数据库名]
# 删除数据库
dropdb database_name
以其它用户身份创建数据库:
# -W 密码验证
createdb -U [用户名] -W [数据库名]
命令 psql
以进入数据库的交互式命令行
使用 \?
获取帮助
命令行
最开始遇到的问题
以用户 example
进入 testdb
数据库的交互式命令行
# -W 为输入密码
psql -U example -W testdb
用户名, 密码, 数据库都正确, 但却报错:
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: Peer authentication failed for user "example"
问题出在身份验证方式上, 如果当前操作系统的用户名与数据库中的用户名不一致, 就会认证失败
在PostgreSQL中,Peer 身份验证是一种针对本地连接的身份验证方法。默认情况下,它使用操作系统的用户和组来验证 PostgreSQL 的用户身份。
我们可以修改认证方式来解决这个问题:
md5 认证方式我个人不推荐, 在本地连接中, 可以采用 SCRAM-SHA-256 认证
编辑
/etc/postgresql/版本号/main/pg_hba.conf
文件, 修改本地认证方式# TYPE DATABASE USER ADDRESS METHOD local all all scram-sha-256
- 重启 postgreSQL 服务
数据库
在交互式命令行中, 可用简写命令查询和切换数据库
\l # 列出数据库
\c [数据库] # 切换数据库
使用 SQL 语句操作数据库
# 查找数据库
SELECT datname FROM pg_database;
用户管理
创建用户
CREATE USER 用户名 WITH PASSWORD '密码';
分配权限
GRANT ALL PRIVILEGES ON DATABASE 数据库 TO 用户;
-- 修改数据库所有者
ALTER DATABASE 数据库 OWNER TO 用户;
# 赋予超级权限
ALTER USER 用户 WITH SUPERUSER;
一般先用 postgres 创建数据库, 再授权数据库给用户
删除用户:
DROP USER IF EXISTS 用户名;
权限管理
-- 去除用户创建数据库的权限:
ALTER ROLE 用户名 NOCREATEDB;
-- 授权用户可创建数据库:
ALTER ROLE 用户名 CREATEDB
开启远程连接
建议使用非管理员用户开启远程连接
修改配置文件 /etc/postgresql/版本号/main/postgresql.conf
, 以允许其它 IP 进行访问
listen_addresses = "*"
修改 /etc/postgresql/版本号/main/pg_hba.conf
文件, 以允许远程连接
# TYPE DATABASE USER ADDRESS METHOD
host all all 0.0.0.0/0 scram-sha-256
根据需要修改文件
最后重启 PostageSQL 服务
交互式命令行
\l # 列出数据库
信息查看
查看选项:
S
系统对象 (show system objects)+
额外信息 (additional detail)
一个例子:
\d # 列出表, 视图等
\du # 列出角色, 即用户
PGSQL 语句
创建数据库:
CREATE DATABASE 数据库名;