最近在学习PostgreSQL 技术体系,前面几篇文章介绍了 认识 PostgreSQL 基础权限体系,PostgreSQL 相关系统日志参数,今天学习一下常用的命令。
查看当前数据库所有的用户以及对应的权限
\du
查看schema的相关信息
\dn
在PG里面的schema和user有差异,用户是独立于 数据库,schema,表之外的,MySQL 中 user 基本等于 schema 。PG 默认登陆的是 指定数据库的 public schema 。可以使用 \c 切换到对应的 schema下面
\c
schema_name
user_name
验证当前的schema 是哪个?
show search_path ;
可以直接使用 \l (小写字母L) 显示出所有的数据库来,字符集,
\l
如果我们要切换到其他数据库, mysql 使用 use dbname;
PG 使用
\c dbname [username]
查看当前schema 里面所有的表
\d
查看表结构
\d+ tablename
查看哪些用户具有权限访问表
\z tablename
test=# \z proctest
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+----------+-------+-------------------+-------------------+----------
public | proctest | table | | |
(1 row)
### 赋给 xx用户对表 proctest的select权限。
test=# grant select on proctest to xx;
GRANT
test=# \z proctest
Access privileges
Schema | Name | Type | Access privileges | Column privileges | Policies
--------+----------+-------+-----------------------------+-------------------+----------
public | proctest | table | test_user=arwdDxt/test_user+| |
| | | xx=r/test_user | |
(1 row)
查看索引
\di index_name
直接执行 show 参数名即可。
postgresql=# show log_statement;
log_statement
---------------
all
(1 row)
\x命令的含义是:psql客户端每行仅仅显示一个字段以及该字段值. 类似 mysql 中的 \G
\h:查看SQL命令的解释,比如\h select。
\?:查看psql命令列表。
\e:打开文本编辑器。
\conninfo:列出当前数据库和连接的信息。
postgresql=# explain select * from t1 where id=2;
QUERY PLAN
----------------------------------------------------
Seq Scan on t1 (cost=0.00..41.88 rows=13 width=4)
Filter: (id = 2)
(2 rows)
select * from
pg_stat_activity
;
SELECT datname,
pid,
usename,
query_start,
STATE,
left(query,40) query,
now()-query_start
FROM pg_stat_activity
WHERE STATE<>'idle'
AND (backend_xid IS NOT NULL
OR backend_xmin IS NOT NULL)
ORDER BY now()-query_start;
select relowner::regrole,relname,relkind,relpages,reltuples from pg_class where relname='t1';
SELECT relname AS TABLE_NAME,
pg_size_pretty(pg_relation_size(schemaname||'.'||relname)) AS table_size,
n_dead_tup,
n_live_tup,
(n_dead_tup * 100 / (n_live_tup + n_dead_tup))AS dead_tup_ratio
FROM pg_stat_user_tables
WHERE n_dead_tup<>0 order by 5 desc LIMIT 10;
select datname,usename,state,count(*) from pg_stat_activity group by datname,usename,state order by 1,2,3,4;
select pg_terminate_backend(pid) from pg_stat_activity where clock_timestamp()-query_start > '10 min' and backend_type='client backend';
select pg_terminate_backend(pid) from pg_stat_activity where clock_timestamp()-xact_start > '10 min' and backend_type='client backend';