史上最全:PostgreSQL DBA常用SQL查詢語句(建議收藏學習)
編者的話:PostgreSQL連續兩年被評為年度資料庫,備受很多DBA的青睞,本文我們一起來了解學習PostgreSQL常用的查詢語句有哪些?
檢視幫助命令
DB=# help --總的幫助
DB=# \h --SQL commands級的幫助
DB=# \? --psql commands級的幫助
按列顯示,類似MySQL的\G
DB=# \x
Expanded display is on.
檢視DB安裝目錄(最好root使用者執行)
find / -name initdb
檢視有多少DB例項在執行(最好root使用者執行)
find / -name postgresql.conf
檢視DB版本
cat $PGDATA/PG_VERSION
psql --version
DB=# show server_version;
DB=# select version();
檢視DB例項執行狀態
pg_ctl status
檢視所有資料庫
psql –l --檢視5432埠下面有多少個DB
psql –p XX –l --檢視XX埠下面有多少個DB
DB=# \l
DB=# select * from pg_database;
建立資料庫
createdb database_name
DB=# \h create database --建立資料庫的幫助命令
DB=# create database database_name
進入某個資料庫
psql –d dbname
DB=# \c dbname
檢視當前資料庫
DB=# \c
DB=# select current_database();
檢視資料庫檔案目錄
DB=# show data_directory;
cat $PGDATA/postgresql.conf |grep data_directory
cat /etc/init.d/postgresql|grep PGDATA=
lsof |grep 5432得出第二列的PID號再ps –ef|grep PID
檢視錶空間
select * from pg_tablespace;
檢視語言
select * from pg_language;
查詢所有schema,必須到指定的資料庫下執行
select * from information_schema.schemata;
SELECT nspname FROM pg_namespace;
\dnS
檢視錶名
DB=# \dt --只能檢視到當前資料庫下public的表名
DB=# SELECT tablename FROM pg_tables WHERE tablename NOT LIKE 'pg%' AND tablename NOT LIKE 'sql_%' ORDER BY tablename;
DB=# SELECT * FROM information_schema.tables WHERE table_name='ff_v3_ff_basic_af';
檢視錶結構
DB=# \d tablename
DB=# select * from information_schema.columns where table_schema='public' and table_name='XX';
檢視索引
DB=# \di
DB=# select * from pg_index;
檢視檢視
DB=# \dv
DB=# select * from pg_views where schemaname = 'public';
DB=# select * from information_schema.views where table_schema = 'public';
檢視觸發器
DB=# select * from information_schema.triggers;
檢視序列
DB=# select * from information_schema.sequences where sequence_schema = 'public';
檢視約束
DB=# select * from pg_constraint where contype = 'p'
DB=# select a.relname as table_name,b.conname as constraint_name,b.contype as constraint_type from pg_class a,pg_constraint b where a.oid = b.conrelid and a.relname = 'cc';
檢視XX資料庫的大小
SELECT pg_size_pretty(pg_database_size('XX')) As fulldbsize;
檢視所有資料庫的大小
select pg_database.datname, pg_size_pretty (pg_database_size(pg_database.datname)) AS size from pg_database;
檢視各資料庫資料建立時間:
select datname,(pg_stat_file(format('%s/%s/PG_VERSION',case when spcname='pg_default' then 'base' else 'pg_tblspc/'||t2.oid||'/PG_11_201804061/' end, t1.oid))).* from pg_database t1,pg_tablespace t2 where t1.dattablespace=t2.oid;
按佔空間大小,順序檢視所有表的大小
select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;
按佔空間大小,順序檢視索引大小
select indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;
檢視引數檔案
DB=# show config_file;
DB=# show hba_file;
DB=# show ident_file;
檢視當前會話的引數值
DB=# show all;
檢視引數值
select * from pg_file_settings
檢視某個引數值,比如引數work_mem
DB=# show work_mem
修改某個引數值,比如引數work_mem
DB=# alter sy stem set work_mem='8MB'
--使用alter system命令將修改postgresql.auto.conf檔案,而不是postgresql.conf,這樣可以很好的保護postgresql.conf檔案,加入你使用很多alter system命令後搞的一團糟,那麼你只需要刪除postgresql.auto.conf,再執行pg_ctl reload載入postgresql.conf檔案即可實現引數的重新載入。
檢視是否歸檔
DB=# show archive_mode;
檢視執行日誌的相關配置,執行日誌包括Error資訊,定位慢查詢SQL,資料庫的啟動關閉資訊,checkpoint過於頻繁等的告警資訊。
show logging_collector;--啟動日誌收集
show log_directory;--日誌輸出路徑
show log_filename;--日誌檔名
show log_truncate_on_rotation;--當生成新的檔案時如果檔名已存在,是否覆蓋同名舊檔名
show log_statement;--設定日誌記錄內容
show log_min_duration_statement;--執行XX毫秒的語句會被記錄到日誌中,-1表示禁用這個功能,0表示記錄所有語句,類似mysql的慢查詢配置
檢視wal日誌的配置,wal日誌就是redo重做日誌
存放在data_directory/pg_wal目錄
檢視當前使用者
DB=# \c
DB=# select current_user;
檢視所有使用者
DB=# select * from pg_user;
DB=# select * from pg_shadow;
檢視所有角色
DB=# \du
DB=# select * from pg_roles;
查詢使用者XX的許可權,必須到指定的資料庫下執行
select * from information_schema.table_privileges where grantee='XX';
建立使用者XX,並授予超級管理員許可權
create user XXX SUPERUSER PASSWORD '123456'
建立角色,賦予了login許可權,則相當於建立了使用者,在pg_user可以看到這個角色
create role "user1" superuser;--pg_roles有user1,pg_user和pg_shadow沒有user1
alter role "user1" login;--pg_user和pg_shadow也有user1了
授權
DB=# \h grant
GRANT ALL PRIVILEGES ON schema schemaname TO dbuser;
grant ALL PRIVILEGES on all tables in schema fds to dbuser;
GRANT ALL ON tablename TO user;
GRANT ALL PRIVILEGES ON DATABASE dbname TO dbuser;
grant select on all tables in schema public to dbuser;--給使用者讀取public這個schema下的所有表
GRANT create ON schema schemaname TO dbuser;--給使用者授予在schema上的create許可權,比如create table、create view等
GRANT USAGE ON schema schemaname TO dbuser;
grant select on schema public to dbuser;--報錯ERROR: invalid privilege type SELECT for schema
--USAGE:對於程式語言來說,允許使用指定的程式語言建立函式;對於Schema來說,允許查詢該Schema下的物件;對於序列來說,允許使用currval和nextval函式;對於外部封裝器來說,允許使用外部封裝器來建立外部伺服器;對於外部伺服器來說,允許建立外部表。
檢視錶上存在哪些索引以及大小
select relname,n.amname as index_type from pg_class m,pg_am n where m.relam = n.oid and m.oid in
(select b.indexrelid from pg_class a,pg_index b where a.oid = b.indrelid and a.relname = 'cc');
SELECT c.relname,c2.relname, c2.relpages*8 as size_kb FROM pg_class c, pg_class c2, pg_index i
WHERE c.relname ='cc' AND c.oid =i.indrelid AND c2.oid =i.indexrelid ORDER BY c2.relname;
檢視索引定義
select b.indexrelid from pg_class a,pg_index b where a.oid = b.indrelid and a.relname = 'cc';
select pg_get_indexdef(b.indexrelid);
檢視過程函式定義
select oid,* from pg_proc where proname = 'insert_platform_action_exist'; --oid = 24610
select * from pg_get_functiondef(24610);
檢視錶大小(不含索引等資訊)
select pg_relation_size('cc'); --368640 byte
select pg_size_pretty(pg_relation_size('cc')) --360 kB
檢視錶所對應的資料檔案路徑與大小
SELECT pg_relation_filepath(oid), relpages FROM pg_class WHERE relname = 'empsalary';
posegresql查詢當前lsn
1、用到哪些方法:
apple=# select proname from pg_proc where proname like 'pg_%_lsn';
proname
---------------------------------
pg_current_wal_flush_lsn
pg_current_wal_insert_lsn
pg_current_wal_lsn
pg_last_wal_receive_lsn
pg_last_wal_replay_lsn
2、查詢當前的lsn值:
apple=# select pg_current_wal_lsn();
pg_current_wal_lsn
--------------------------
0/45000098
3、查詢當前lsn對應的日誌檔案
select pg_walfile_name('0/1732DE8');
4、查詢當前lsn在日誌檔案中的偏移量
SELECT * FROM pg_walfile_name_offset(pg_current_wal_lsn());
切換pg_wal日誌
select pg_switch_wal();
清理pg_wal日誌
pg_archivecleanup /postgresql/pgsql/data/pg_wal 000000010000000000000005
表示刪除000000010000000000000005之前的所有日誌
--pg_wal日誌沒有設定保留週期的引數,即沒有類似mysql的引數expire_logs_days,pg_wal日誌永久保留,除非shell腳步刪除幾天前或pg-rman備份時候設定保留策略
查詢有哪些slot,任意一個資料庫下都可以查,查詢的結果都一樣
select * from pg_replication_slots;
原創:廖學強
出處:http://blog.itpub.net/30126024/viewspace-2655205/
另:墨天輪社群有開設專門的PG專欄,歡迎大家參考學習(,複製到瀏覽器即可檢視)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2669273/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- postgresql dba常用sql查詢語句SQL
- mysql dba常用的查詢語句MySql
- sqlserver dba常用的sql語句SQLServer
- 史上最全排序演算法總結!建議收藏排序演算法
- 史上最全執行緒池超詳解(建議收藏)執行緒
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- SQL mother查詢語句SQL
- sql查詢語句流程SQL
- SQL查詢語句 (Oracle)SQLOracle
- PostgreSQL 原始碼解讀(18)- 查詢語句#3(SQL Parse)SQL原始碼
- MySql常用30種SQL查詢語句優化方法MySql優化
- Mysql常用sql語句(20)- 子查詢重點知識MySql
- 多表查詢建表語句
- 整理總結資料庫常用sql語句,建議收藏,忘記了可以來看一下資料庫SQL
- 使用sql語句查詢平均值,使用sql語句查詢資料總條數, not in 篩選語句的使用SQL
- SQL 語句學習SQL
- SQL Server 語句日期格式查詢方法SQLServer
- SQL單表查詢語句總結SQL
- SQL Server-簡單查詢語句SQLServer
- mysql查詢效率慢的SQL語句MySql
- sql常用語句SQL
- PostgreSQL DBA(192) - 整行模糊查詢SQL
- PostgreSQL 原始碼解讀(24)- 查詢語句#9(查詢重寫)SQL原始碼
- mongodb dba常用的nosql語句MongoDBSQL
- shell學習-常用語句
- 常用SQL語句1-增刪改查SQL
- SQL Server 查詢歷史執行的SQL語句SQLServer
- SQL基礎的查詢語句烈鉍SQL
- Laravel 框架查詢執行的 SQL 語句Laravel框架SQL
- 在mysql查詢效率慢的SQL語句MySql
- Oracle常用的系統查詢語句整理Oracle
- MySQL 查詢常用操作(0) —— 查詢語句的執行順序MySql
- MongoDB DBA常用的NoSQL語句(全)MongoDBSQL
- sql語句學習總結SQL
- PostgreSQL 原始碼解讀(29)- 查詢語句#14(查詢優化-上拉子查詢)SQL原始碼優化
- PostgreSQL 原始碼解讀(17)- 查詢語句#2(查詢優化基礎)SQL原始碼優化
- PostgreSQL 原始碼解讀(20)- 查詢語句#5(查詢樹Query詳解)SQL原始碼
- PostgreSQL 原始碼解讀(25)- 查詢語句#10(查詢優化概覽)SQL原始碼優化