|
|
|
|
移动端

PostgreSQL里面的一些命令小结

近两天总结了下PostgreSQL的基本操作命令,对PostgreSQL也有了一个基本的认识。PostgreSQL的功能还是很丰富的,有序列,支持db link,基本Oracle里有的概念它这里也有,目前来看不支持package。

作者:r15笔记第73天来源:杨建荣的学习笔记|2018-03-26 12:01

PostgreSQL里面的一些命令小结

近两天总结了下PostgreSQL的基本操作命令,对PostgreSQL也有了一个基本的认识。

PostgreSQL的功能还是很丰富的,有序列,支持db link,基本Oracle里有的概念它这里也有,目前来看不支持package。

风格和Oracle也类似,没有MySQL中快捷方便的show create table 这样的语句。

从我的使用习惯来说,我基本关注以下的一些方面。

  1. 查看数据库的配置

  2. 查看用户信息

  3. 查看会话连接信息

  4. show tables的类似方法

  5. 用户的权限查看

  6. 建表语句

  7. 表空间信息

  8. 对象存储信息

  9. 查看锁的信息

  10. 查看数据库参数

  11. 显示数据库的运行状态

  12. 查看数据字典的信息

  13. 查看索引的信息

  14. 查看执行计划

  15. 查看存储过程

  16. 存储过程的调度执行

  17. 事务隔离级别

1.查看数据库的配置

可以直接使用\l 选项列出所有的数据库来,字符集,基本的配置都一目了然,有点Oracle 12c中的show pdbs的感觉。

从进程情况来看,PG是多进程多线程的架构设计。

如果查看当前数据库,可以使用current_database()。

  1. postgres=# select current_database();  
  2.  current_database   
  3. ------------------  
  4.  postgres  

2.查看用户信息

可以使用\dn来得到schema的相关信息,在PG里面的schema和user还是有一些差别,在其他数据库schema基本就是user了。

  1. postgres-# \dn  
  2.   List of schemas  
  3.   Name  |  Owner    
  4. --------+----------  
  5.  public | postgres  

我们创建一个schema,然后使用\dn来查看。

  1. postgres=# create schema jeanron100;  
  2. CREATE SCHEMA  
  3. postgres=# \dn  
  4.     List of schemas  
  5.     Name    |  Owner   
  6. ------------+----------  
  7.  jeanron100 | postgres  
  8.  public     | postgres  

或者使用数据字典pg_authid来查看。

  1. postgres=# select *from pg_authid; 

关于schema的概念,我们可以创建一个表test,

  1. postgres=# create table test(id int);  
  2. CREATE TABLE  

可以看到这个是一个public的schema

  1. postgres=# \d  
  2.         List of relations  
  3.  Schema | Name | Type  |  Owner     
  4. --------+------+-------+----------  
  5.  public | test | table | postgres 

如果使用\d来查看字段信息,结果如下:

  1. postgres=# \d test  
  2.      Table "public.test"  
  3.  Column |  Type   | Modifiers   
  4. --------+---------+-----------  
  5.  id     | integer |  

还可以使用pg_users来查看,比如我创建了一个用户replica,就会有相应的配置。

  1. select *from pg_user;  
  2.  usename  | usesysid | usecreatedb | usesuper | userepl | usebypassrls |  passwd  | valuntil | useconfig   
  3. ----------+----------+-------------+----------+---------+--------------+----------+----------  
  4.  postgres |       10 | t           | t        | t       | t            | ******** |          |   
  5.  replica  |    16384 | f           | f        | t       | f            | ******** |          |  

查看当前的schema信息,可以使用current_schema()

3.查看会话连接信息

如果查看PG中的会话信息,可以使用select * from pg_stat_activity;

如果新增了一个连接,开启了一个会话,在服务端是会有一个影子进程存在的。可以根据pid找到对应的会话。包括执行的SQL都可以看到,如果有多个会话,就是多条记录。

  1. postgres=# select * from pg_stat_activity;  
  2. -[ RECORD 1 ]----+--------------------------------  
  3. datid            | 13241  
  4. datname          | postgres  
  5. pid              | 20644  
  6. usesysid         | 10 
  7. usename          | postgres  
  8. application_name | psql  
  9. client_addr      |   
  10. client_hostname  |   
  11. client_port      | -1  
  12. backend_start    | 2018-03-25 05:38:16.988057+08  
  13. xact_start       | 2018-03-25 05:48:08.113649+08  
  14. query_start      | 2018-03-25 05:48:08.113649+08  
  15. state_change     | 2018-03-25 05:48:08.113653+08  
  16. waiting          | f  
  17. state            | active  
  18. backend_xid      |   
  19. backend_xmin     | 1753  
  20. query            | select * from pg_stat_activity; 

4.show tables的类似方法

PG里面暂时没有找到show tables这种的快捷方式,目前发现有两类方式。

一种是通过数据字典pg_tables来查看,相当于Oracle里面的all_tables

或者是使用information_schema里面的tables来查看。

  1. postgres=# select *from information_schema.tables;  
  2. postgres=# select *from pg_tables; 

PG里面的information_schema比较特别,在数据库中直接\l无法看到,但是确确实实存在,着数据字典风格和MySQL很相似。

5.用户的权限查看

查看权限可以使用\dp来完成,或者等价的命令\z来实现。

  1. postgres=# \dp  
  2.                             Access privileges  
  3.  Schema | Name | Type  | Access privileges | Column privileges | Policies   
  4. --------+------+-------+-------------------+-------------------+----------  
  5.  public | test | table |                   |                   |   

6.建表语句

建表语句,目前还没有发现show create table这种快捷的方式,不过可以通过pg_dump或者根据数据字典的信息来拼接了。

7.表空间信息

表空间的部分相对比较清晰,可以直接使用\db来完成。

  1. postgres=# \db  
  2.        List of tablespaces  
  3.     Name    |  Owner   | Location   
  4. ------------+----------+----------  
  5.  pg_default | postgres |   
  6.  pg_global  | postgres |  

或者使用pg_tablespace

  1. postgres=# select *from pg_tablespace;    
  2.   spcname   | spcowner | spcacl | spcoptions   
  3. ------------+----------+--------+------------  
  4.  pg_default |       10 |        |   
  5.  pg_global  |       10 |        |   

8.对象存储信息

这部分信息可以参考pg_tables,还有一些更细节的

更多的细节还有待求证和发现。

9.查看锁的信息

查看锁的信息可以使用pg_locks来得到。

  1. postgres=# select *from pg_locks;  
  2. -[ RECORD 1 ]------+----------------  
  3. locktype           | relation  
  4. database           | 13241  
  5. relation           | 11673  
  6. page               |  
  7. tuple              |   
  8. virtualxid         |   
  9. transactionid      |   
  10. classid            |   
  11. objid              |   
  12. objsubid           |   
  13. virtualtransaction | 4/81  
  14. pid                | 20644  
  15. mode               | AccessShareLock  
  16. granted            | t  
  17. fastpath           | t 

10.查看数据库参数

这部分的功能不是很理解,因为没有找到很便捷的方式。

比如查看缓存的设置

  1. postgres=#  show shared_buffers;  
  2. -[ RECORD 1 ]--+------  
  3. shared_buffers | 128MB 

或者根据参数文件postgresql.conf来查看。

11.显示数据库的运行状态

这个信息毫无疑问,建议还是从pg_stats_activity来查看。

12.查看数据字典的信息

这应该是本小节的重点,通过查看视图可以看到,有100多个视图。

  1. postgres=# select count(*)from pg_views;  
  2. -[ RECORD 1 ]  
  3. count | 112 

还可以使用information_schema中的信息来补充。

13.查看索引的信息

查看索引的信息,可以使用\di来完成,非常快捷。

14.查看执行计划

查看执行计划一般可以根据explain来得到,但是还有几类方法,对结果做格式化处理,比如转化为json或者xml的格式等。

  1. postgres=# explain select *from test;  
  2. -[ RECORD 1 ]------------------------------------------------------  
  3. QUERY PLAN | Seq Scan on test  (cost=0.00..35.50 rows=2550 width=4)  
  4. 得到json格式的执行计划。  
  5. postgres=# explain(format json) select *from test;  
  6. -[ RECORD 1 ]------------------------------  
  7. QUERY PLAN | [                             +  
  8.            |   {                           +  
  9.            |     "Plan": {                 +  
  10.            |       "Node Type""Seq Scan",+  
  11.            |       "Relation Name""test",+  
  12.            |       "Alias""test",        +  
  13.            |       "Startup Cost": 0.00,   +  
  14.            |       "Total Cost": 35.50,    +  
  15.            |       "Plan Rows": 2550,      +  
  16.            |       "Plan Width": 4         +  
  17.            |     }                         +  
  18.            |   }                           +  
  19.            | ] 

或者做一些分析,能够得到更细节的执行信息。

  1. postgres=# explain analyze select *from test;  
  2.                                             QUERY PLAN                                        
  3.  
  4. --------------------------------------------------------------------------------------------------  
  5.  Seq Scan on test  (cost=0.00..35.50 rows=2550 width=4) (actual time=0.001..0.001 rows=0 loops=1)  
  6.  Planning time: 0.018 ms  
  7.  Execution time: 0.009 ms 

15.查看存储过程

查看存储过程就是比较单薄的。可以直接使用pg_proc来得到详细的信息。

pg_proc

16.存储过程的调度执行

目前没有看到很直接的方式,这部分感觉还不够强大。

17.事务隔离级别

根据公司现状和业务规模的不断扩大,其实技术上也是不断地改进和积累,事务方面的处理也是如此,等规模达到了一定的量级,这部分的要求就会很明确。所以很多开发同学对于锁机制都很感兴趣。

查看事务隔离级别的两种SQL语句。

  1. postgres=#  show default_transaction_isolation;  
  2.  default_transaction_isolation   
  3. -------------------------------  
  4.  read committed 

查看当前的事务隔离级别设置。

  1. postgres=# show transaction_isolation;  
  2.  transaction_isolation   
  3. -----------------------  
  4.  read committed  

【编辑推荐】

  1. 数据库紧急恢复过程,快来看看!
  2. 理解数据库连接池底层原理之手写实现
  3. 以MySQL为例,带你从原理上理解那些所谓的数据库军规
  4. StackOverflow 调查:2018 年最流行的数据库分析
  5. 2018年数据库流行度排行榜出炉,Oracle居然没有进前三!
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

程序员面试宝典

本书取材于各大IT公司历年面试真题(笔试、口试、电话面试、英语面试,以及逻辑测试和智商测试)。详细分析了应聘程序员(含网络、测试等...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊