当前位置: 首页 > 科技观察

PostgreSQL一些命令总结

时间:2023-03-14 21:31:41 科技观察

这两天总结了PostgreSQL的基本操作命令,对PostgreSQL有了基本的了解。PostgreSQL的功能还是很丰富的。它有序列并支持数据库链接。它还具有基本Oracle中的概念。目前不支持包。风格也和Oracle类似,没有MySQL中快捷方便的showcreatetable这种语句。从我的使用习惯来看,我主要关注以下几个方面。查看数据库配置查看用户信息查看会话连接信息showtables类似方法用户权限查看建表语句表空间信息对象存储信息查看锁信息查看数据库参数显示数据库运行状态查看数据字典信息查看索引信息查看执行计划和视图存储过程的调度和执行。事务隔离级别1,查看数据库的配置,可以直接使用\l选项,列出所有的数据库,字符集,基本配置,一目了然。有点像Oracle12c中的showpdbs的感觉。从进程上看,PG是多进程多线程的架构设计。如果查看当前数据库,可以使用current_database()。postgres=#selectcurrent_database();current_database----------------postgres2。查看用户信息,可以使用\dn获取schema的相关信息。PG中的schema和user还是有一些区别的。在其他数据库模式中,它基本上是用户。postgres-#\dnListofschemasName|Owner--------+----------public|postgres我们创建一个schema,然后用\dn查看。postgres=#createschemajeanron100;CREATESCHEMApostgres=#\dnListofschemasName|Owner------------+----------jeanron100|postgrespublic|postgres或者使用数据字典pg_authid查看。postgres=#select*frompg_authid;关于schema的概念,我们可以建表test,postgres=#createtabletest(idint);CREATETABLE可以看到这是一个publicschemapostgres=#\dListofrelationsSchema|Name|Type|Owner--------+-----+--------+----------public|test|table|postgres如果使用\d查看字段信息,结果如下:postgres=#\dtestTable"public.test"Column|Type|Modifiers-------+--------+------------id|integer|also可以用pg_users查看。比如我创建一个用户副本,就会有相应的配置。选择*frompg_user;usename|usesysid|usecreatedb|usesuper|userepl|usebypassrls|passwd|valuntil|useconfig----------+--------+--------------+------------+--------+------------+---------+------------postgres|10|t|t|t|t|********||replica|16384|f|f|t|f|********||查看当前schema信息,可以使用current_schema()3.查看session连接信息如果在PG中查看session信息,可以使用select*frompg_stat_activity;如果你添加一个新的连接,打开一个Session,在服务器端会有一个影子进程。根据pid可以找到对应的session。包括执行的SQL,可以看到如果有多个session,就有多条记录。postgres=#select*frompg_stat_activity;-[RECORD1]----+----------------------------datid|13241datname|postgrespid|20644usesysid|10usename|postgresapplication_name|psqlclient_addr|client_hostname|client_port|-1backend_start|2018-03-2505:38:16.988057+08xact_start|2018-03-2505:48:08.11361_40-5|38-start|28-08:08.113649+08state_change|2018-03-2505:48:08.113653+08waiting|fstate|activebackend_xid|backend_xmin|1753query|select*frompg_stat_activity;4、PG中暂时没有showtables之类的快捷方式。发现了两种类型的方法。一种是通过数据字典pg_tables来查看,相当于Oracle中的all_tables或者使用information_schema中的表来查看。postgres=#select*frominformation_schema.tables;postgres=#select*frompg_tables;PG中的information_schema比较特殊,在数据库中不能直接看到,但是确实存在,而且数据字典的风格和MySQL很像.5、用户的权限查看查看权限可以使用\dp来完成,或者等价的命令\z来实现。postgres=#\dpAccessprivilegesSchema|Name|Type|Accessprivileges|Columnprivileges|Policies------+------+------+----------------+----------------+----------public|test|table|||6.buildTablestatement创建表语句,没有showcreatetable这种快捷方式,但是可以通过pg_dump或者根据数据字典中的信息拼接。7、表空间信息表空间部分比较清楚,直接用\db即可完成。postgres=#\dbListoftablespacesName|Owner|Location------------+--------+---------pg_default|postgres|pg_global|postgres|或使用pg_tablespacepostgres=#select*frompg_tablespace;spcname|spcowner|spcacl|spcoptions------------+---------+--------+-----------pg_default|10||pg_global|10||8。对象存储信息这部分信息可以参考pg_tables,还有一些细节需要验证和发现。9.查看锁信息可以使用pg_locks查看锁信息。postgres=#select*frompg_locks;-[RECORD1]------+----------------locktype|relationdatabase|13241relation|11673page|tuple|virtualxid|transactionid|classid|objid|objsubid|virtualtransaction|4/81pid|20644mode|AccessShareLockgranted|tfastpath|t10。查看数据库参数的功能不是很清楚,因为没有方便的方法可以找到。比如查看缓存设置postgres=#showshared_buffers;-[RECORD1]--+------shared_buffers|128MB或者根据参数文件postgresql.conf查看。11、显示数据库的运行状态。这个信息是毫无疑问的。建议从pg_stats_activity中查看。12、查看数据字典的信息这应该是本节的重点。查看views可以看到有100多个views。postgres=#selectcount(*)frompg_views;-[RECORD1]count|112也可以通过information_schema中的信息补充。13、查看索引信息查看索引信息可以使用\di来完成,速度非常快。14、查看执行计划查看执行计划一般可以根据explain得到,但是有几种方法可以对结果进行格式化,比如转成json或者xml格式。postgres=#explainselect*fromtest;-[RECORD1]------------------------------------------------------QUERYPLAN|SeqScanontest(cost=0.00..35.50rows=2550width=4)获取json格式的执行计划。postgres=#explain(formatjson)select*fromtest;-[RECORD1]----------------------------查询计划|[+|{+|"Plan":{+|"NodeType":"SeqScan",+|"RelationName":"test",+|"Alias":"test",+|"StartupCost":0.00,+|"TotalCost"":35.50,+|"PlanRows":2550,+|"PlanWidth":4+|}+|}+|]或做一些分析以获得更详细的执行信息。postgres=#explainanalyzeselect*fromtest;QUERYPLAN--------------------------------------------------------------------------------------------SeqScanontest(cost=0.00..35.50rows=2550width=4)(actualtime=0.001..0.001rows=0loops=1)Planningtime:0.018msExecutiontime:0.009ms15.查看存储过程是比较细的。您可以直接使用pg_proc来获取详细信息。pg_proc16。目前还没有直接调度和执行存储过程的方法,感觉这部分功能不够强大。17、事务隔离级别根据公司现状和业务规模的不断扩大,其实技术在不断的完善和积累,事务处理也是如此。当规模达到一定程度,这部分的要求就会很明确。所以很多开发同学对锁机制很感兴趣。再看事务隔离级别的两条SQL语句。postgres=#showdefault_transaction_isolation;default_transaction_isolation--------------------------------readcommitted查看当前事务隔离级别设置。postgres=#showtransaction_isolation;transaction_isolation--------------------读提交