PostgreSQL里面的一些命令小結(jié)
近兩天總結(jié)了下PostgreSQL的基本操作命令,對(duì)PostgreSQL也有了一個(gè)基本的認(rèn)識(shí)。
PostgreSQL的功能還是很豐富的,有序列,支持db link,基本Oracle里有的概念它這里也有,目前來(lái)看不支持package。
風(fēng)格和Oracle也類(lèi)似,沒(méi)有MySQL中快捷方便的show create table 這樣的語(yǔ)句。
從我的使用習(xí)慣來(lái)說(shuō),我基本關(guān)注以下的一些方面。
-
查看數(shù)據(jù)庫(kù)的配置
-
查看用戶(hù)信息
-
查看會(huì)話(huà)連接信息
-
show tables的類(lèi)似方法
-
用戶(hù)的權(quán)限查看
-
建表語(yǔ)句
-
表空間信息
-
對(duì)象存儲(chǔ)信息
-
查看鎖的信息
-
查看數(shù)據(jù)庫(kù)參數(shù)
-
顯示數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)
-
查看數(shù)據(jù)字典的信息
-
查看索引的信息
-
查看執(zhí)行計(jì)劃
-
查看存儲(chǔ)過(guò)程
-
存儲(chǔ)過(guò)程的調(diào)度執(zhí)行
-
事務(wù)隔離級(jí)別
1.查看數(shù)據(jù)庫(kù)的配置
可以直接使用\l 選項(xiàng)列出所有的數(shù)據(jù)庫(kù)來(lái),字符集,基本的配置都一目了然,有點(diǎn)Oracle 12c中的show pdbs的感覺(jué)。
從進(jìn)程情況來(lái)看,PG是多進(jìn)程多線(xiàn)程的架構(gòu)設(shè)計(jì)。
如果查看當(dāng)前數(shù)據(jù)庫(kù),可以使用current_database()。
- postgres=# select current_database();
- current_database
- ------------------
- postgres
2.查看用戶(hù)信息
可以使用\dn來(lái)得到schema的相關(guān)信息,在PG里面的schema和user還是有一些差別,在其他數(shù)據(jù)庫(kù)schema基本就是user了。
- postgres-# \dn
- List of schemas
- Name | Owner
- --------+----------
- public | postgres
我們創(chuàng)建一個(gè)schema,然后使用\dn來(lái)查看。
- postgres=# create schema jeanron100;
- CREATE SCHEMA
- postgres=# \dn
- List of schemas
- Name | Owner
- ------------+----------
- jeanron100 | postgres
- public | postgres
或者使用數(shù)據(jù)字典pg_authid來(lái)查看。
- postgres=# select *from pg_authid;
關(guān)于schema的概念,我們可以創(chuàng)建一個(gè)表test,
- postgres=# create table test(id int);
- CREATE TABLE
可以看到這個(gè)是一個(gè)public的schema
- postgres=# \d
- List of relations
- Schema | Name | Type | Owner
- --------+------+-------+----------
- public | test | table | postgres
如果使用\d來(lái)查看字段信息,結(jié)果如下:
- postgres=# \d test
- Table "public.test"
- Column | Type | Modifiers
- --------+---------+-----------
- id | integer |
還可以使用pg_users來(lái)查看,比如我創(chuàng)建了一個(gè)用戶(hù)replica,就會(huì)有相應(yīng)的配置。
- select *from pg_user;
- usename | usesysid | usecreatedb | usesuper | userepl | usebypassrls | passwd | valuntil | useconfig
- ----------+----------+-------------+----------+---------+--------------+----------+----------
- postgres | 10 | t | t | t | t | ******** | |
- replica | 16384 | f | f | t | f | ******** | |
查看當(dāng)前的schema信息,可以使用current_schema()
3.查看會(huì)話(huà)連接信息
如果查看PG中的會(huì)話(huà)信息,可以使用select * from pg_stat_activity;
如果新增了一個(gè)連接,開(kāi)啟了一個(gè)會(huì)話(huà),在服務(wù)端是會(huì)有一個(gè)影子進(jìn)程存在的。可以根據(jù)pid找到對(duì)應(yīng)的會(huì)話(huà)。包括執(zhí)行的SQL都可以看到,如果有多個(gè)會(huì)話(huà),就是多條記錄。
- postgres=# select * from pg_stat_activity;
- -[ RECORD 1 ]----+--------------------------------
- datid | 13241
- datname | postgres
- pid | 20644
- usesysid | 10
- usename | postgres
- application_name | psql
- client_addr |
- client_hostname |
- client_port | -1
- backend_start | 2018-03-25 05:38:16.988057+08
- xact_start | 2018-03-25 05:48:08.113649+08
- query_start | 2018-03-25 05:48:08.113649+08
- state_change | 2018-03-25 05:48:08.113653+08
- waiting | f
- state | active
- backend_xid |
- backend_xmin | 1753
- query | select * from pg_stat_activity;
4.show tables的類(lèi)似方法
PG里面暫時(shí)沒(méi)有找到show tables這種的快捷方式,目前發(fā)現(xiàn)有兩類(lèi)方式。
一種是通過(guò)數(shù)據(jù)字典pg_tables來(lái)查看,相當(dāng)于Oracle里面的all_tables
或者是使用information_schema里面的tables來(lái)查看。
- postgres=# select *from information_schema.tables;
- postgres=# select *from pg_tables;
PG里面的information_schema比較特別,在數(shù)據(jù)庫(kù)中直接\l無(wú)法看到,但是確確實(shí)實(shí)存在,著數(shù)據(jù)字典風(fēng)格和MySQL很相似。
5.用戶(hù)的權(quán)限查看
查看權(quán)限可以使用\dp來(lái)完成,或者等價(jià)的命令\z來(lái)實(shí)現(xiàn)。
- postgres=# \dp
- Access privileges
- Schema | Name | Type | Access privileges | Column privileges | Policies
- --------+------+-------+-------------------+-------------------+----------
- public | test | table | | |
6.建表語(yǔ)句
建表語(yǔ)句,目前還沒(méi)有發(fā)現(xiàn)show create table這種快捷的方式,不過(guò)可以通過(guò)pg_dump或者根據(jù)數(shù)據(jù)字典的信息來(lái)拼接了。
7.表空間信息
表空間的部分相對(duì)比較清晰,可以直接使用\db來(lái)完成。
- postgres=# \db
- List of tablespaces
- Name | Owner | Location
- ------------+----------+----------
- pg_default | postgres |
- pg_global | postgres |
或者使用pg_tablespace
- postgres=# select *from pg_tablespace;
- spcname | spcowner | spcacl | spcoptions
- ------------+----------+--------+------------
- pg_default | 10 | |
- pg_global | 10 | |
8.對(duì)象存儲(chǔ)信息
這部分信息可以參考pg_tables,還有一些更細(xì)節(jié)的
更多的細(xì)節(jié)還有待求證和發(fā)現(xiàn)。
9.查看鎖的信息
查看鎖的信息可以使用pg_locks來(lái)得到。
- postgres=# select *from pg_locks;
- -[ RECORD 1 ]------+----------------
- locktype | relation
- database | 13241
- relation | 11673
- page |
- tuple |
- virtualxid |
- transactionid |
- classid |
- objid |
- objsubid |
- virtualtransaction | 4/81
- pid | 20644
- mode | AccessShareLock
- granted | t
- fastpath | t
10.查看數(shù)據(jù)庫(kù)參數(shù)
這部分的功能不是很理解,因?yàn)闆](méi)有找到很便捷的方式。
比如查看緩存的設(shè)置
- postgres=# show shared_buffers;
- -[ RECORD 1 ]--+------
- shared_buffers | 128MB
或者根據(jù)參數(shù)文件postgresql.conf來(lái)查看。
11.顯示數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)
這個(gè)信息毫無(wú)疑問(wèn),建議還是從pg_stats_activity來(lái)查看。
12.查看數(shù)據(jù)字典的信息
這應(yīng)該是本小節(jié)的重點(diǎn),通過(guò)查看視圖可以看到,有100多個(gè)視圖。
- postgres=# select count(*)from pg_views;
- -[ RECORD 1 ]
- count | 112
還可以使用information_schema中的信息來(lái)補(bǔ)充。
13.查看索引的信息
查看索引的信息,可以使用\di來(lái)完成,非常快捷。
14.查看執(zhí)行計(jì)劃
查看執(zhí)行計(jì)劃一般可以根據(jù)explain來(lái)得到,但是還有幾類(lèi)方法,對(duì)結(jié)果做格式化處理,比如轉(zhuǎn)化為json或者xml的格式等。
- postgres=# explain select *from test;
- -[ RECORD 1 ]------------------------------------------------------
- QUERY PLAN | Seq Scan on test (cost=0.00..35.50 rows=2550 width=4)
- 得到j(luò)son格式的執(zhí)行計(jì)劃。
- postgres=# explain(format json) select *from test;
- -[ RECORD 1 ]------------------------------
- QUERY PLAN | [ +
- | { +
- | "Plan": { +
- | "Node Type": "Seq Scan",+
- | "Relation Name": "test",+
- | "Alias": "test", +
- | "Startup Cost": 0.00, +
- | "Total Cost": 35.50, +
- | "Plan Rows": 2550, +
- | "Plan Width": 4 +
- | } +
- | } +
- | ]
或者做一些分析,能夠得到更細(xì)節(jié)的執(zhí)行信息。
- postgres=# explain analyze select *from test;
- QUERY PLAN
- --------------------------------------------------------------------------------------------------
- Seq Scan on test (cost=0.00..35.50 rows=2550 width=4) (actual time=0.001..0.001 rows=0 loops=1)
- Planning time: 0.018 ms
- Execution time: 0.009 ms
15.查看存儲(chǔ)過(guò)程
查看存儲(chǔ)過(guò)程就是比較單薄的??梢灾苯邮褂胮g_proc來(lái)得到詳細(xì)的信息。
pg_proc
16.存儲(chǔ)過(guò)程的調(diào)度執(zhí)行
目前沒(méi)有看到很直接的方式,這部分感覺(jué)還不夠強(qiáng)大。
17.事務(wù)隔離級(jí)別
根據(jù)公司現(xiàn)狀和業(yè)務(wù)規(guī)模的不斷擴(kuò)大,其實(shí)技術(shù)上也是不斷地改進(jìn)和積累,事務(wù)方面的處理也是如此,等規(guī)模達(dá)到了一定的量級(jí),這部分的要求就會(huì)很明確。所以很多開(kāi)發(fā)同學(xué)對(duì)于鎖機(jī)制都很感興趣。
查看事務(wù)隔離級(jí)別的兩種SQL語(yǔ)句。
- postgres=# show default_transaction_isolation;
- default_transaction_isolation
- -------------------------------
- read committed
查看當(dāng)前的事務(wù)隔離級(jí)別設(shè)置。
- postgres=# show transaction_isolation;
- transaction_isolation
- -----------------------
- read committed