管理
无前缀的为普通用户命令,$
为 postgres 命令,#
为 psql 命令。
- 切到 postgres 用户:
sudo -iu postgres
- 新建用户:
$ createuser --interactive
- 删除用户:
$ dropuser ${username}
- 新建库:
createdb ${db_name} -U ${username}
- 删除库:
dropdb ${db_name} -U ${username}
- 连接数据库:
psql -d ${db_name} -U ${username}
- 切换数据库:
# c ${db_name}
- 切换用户:
# c - ${user_name}
- 列出所有用户:
# du
- 列出所有库:
# l
或# SELECT * FROM pg_database;
- 列出所有表:
dt
或# SELECT * FROM pg_tables;
- 列出所有模式:
dn
- 退出 psql:
q
或 CTRL + D - 配置表:
SELECT * FROM pg_settings;
- 优先修改 postgresql.auto.conf 而非 postgresql.conf,前者会覆盖后者,但不要手动修改,使用
# ALTER SYSTEM SET ${prop_name} = ${value};
,如# ALTER SYSTEM SET work_mem = '500M';
会自动刷新 auto* 的数据 - postgresql*.conf 中可以
include ${path_releate_conf}
引入其他配置文件 - PostgreSQL 异常关闭可能会导致 postmaster.pid 残留,删除了才能正常启动
- pg.hba.conf 规定哪些 IP 哪些用户哪种方式登录,自上至下匹配,常用的身份验证方式:
trust
没要求,md5
md5 的密码,password
明文密码,ident
用户映射(Win 不支持),peer
操作系统用户名一致就能登录,cer
SSL 证书 - 获取当前执行的进程
SELECT * FROM pg_stat_activity;
,查找阻塞的语句SELECT * FROM pg_stat_activity WHERE wait_event IS NOT NULL
- 取消进程连接:
SELECT pg_cancel_backend(${pid});
- 终止进程连接:
SELECT pg_terminate_backend(${pid});
,连接终止了执行的 SQL 也会终止,举个例子,终止 test_user 用户的所有连接SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE usename = 'test_user';
- 还有一些语句参数阈值,超过某阈值的语句会被自动杀掉,0 表示禁用,
deadlock_timeout
死锁超时(更建议使用SELECT FOR UPDATE NOWAIT ...
而非依赖这个阈值),statement_timeout
语句最长执行时间(可针对单个语句自定义),lock_timeout
锁等待超时,idle_in_transaction_session_timeout
空闲事务最大超时时长 - 创建模板:
CREATE DATABASE my_db TEMPLATE my_template_db;
模板数据库禁止编辑与删除,将普通数据库修改为模板数据库:UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'mydb';
,修改为非模板数据库datistemplate
置FALSE
即可 - scheme 用于对 database 进行分组管理(有很多表的话),同一个 scheme 中对象名不允许重复,创建时默认的表是 public scheme 的,创建 scheme 的语句为
CREATE SCHEME ${name}
,scheme 不同的话需要在表名前加上,还可以设置search_path
,去在不同的 scheme 中查找表,比如在 postgresql.conf 中配置search_path = "$user", public
,则会优先查找用户同名的 scheme - 查询当前用户
SELECT user;
- 常用的几种权限,
INSERT
,SELECT
,UPDATE
,ALTER
,EXECUTE
,TRUNCATE
- 对象所有者天生拥有对象所有权限,无需授予,但是这个权限对子对象没有继承关系,
SQL
- 创建用户
CREATE ROLE ol3l_ox7 WITH LOGIN ENCRYPTED PASSWORD 'Changeme_123' NOSUPERUSER NOCREATEDB
NOCREATEROLE INHERIT NOREPLICATION NOBYPASSRLS CONNECTION LIMIT -1;
- 创建数据库
CREATE DATABASE music_hub WITH OWNER ol3l_ox7 TEMPLATE template0 ENCODING 'UTF8'
LC_COLLATE 'en_US.utf8' LC_CTYPE 'en_US.utf8' ALLOW_CONNECTIONS TRUE CONNECTION LIMIT -1 IS_TEMPLATE FALSE;
- 按 database 授予权限
GRANT ALL PRIVILEGES ON DATABASE music_hub TO ol3l_ox7;
- 按 scheme 授予权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO ol3l_ox7;
- 收回部分权限,这里的 PUBLIC 是所有人的意思,系统会默认将某些权限授予 PUBLIC (即所有人)
REVOKE EXECUTE ON ALL FUNCTIONS IN SCHEMA ol3l_ox7 FROM PUBLIC;