psql 介紹
psql 是 PostgreSQL 中的一個命令行交互式客戶端工具,
它允許你交互地鍵入 SQL 命令,然后把它們發送給 PostgreSQL 服務器,再顯示 SQL 或命令的結果。
輸入的內容允許來自一個文件,此外它還提供了一些元命令和多種類似 shell 的特性來實現書寫腳本,以及對大量任務的自動化工作。
特性:方便快捷、沒有圖形化工具使用上的一些限制
psql 的簡單使用
直接輸入 psql 進入到命令行下:
安裝數據庫時,會自動創建一個與當前操作系統用戶同名的數據庫超級用戶,在當前系統下,登錄數據庫時執行的是操作系統認證,所以不需要用戶名和密碼,當然也可以通過修改 pg_hba.conf 文件來要求輸入密碼。
下面介紹一下常用的 psql 連接數據庫的方法,命名格式如下:
psql -h <hostname or ip> -p <端口> [數據庫名稱] [用戶名稱]
這些連接參數也可以用環境變量指定,比如:
export PGDATABASE=testdb
export PGHOST=127.0.0.1
export PGPORT=5432
export PGUSER=postgres
然后直接允許 psql 即可。
psql 的常用命令
psql 的命令都是以斜杠 "\" 開頭的。
\l 查看所有數據庫
\d [ pattern ] 該命令將顯示每個匹配關系(表、視圖、索引、序列)的信息,可以加上 + 查看更多的信息,如 \d+
1、不加任何參數表示查看當前數據庫的所有表。
2、\d tablename 后面跟一個表名,表示顯示這個表的結構定義
3、\d indexname 也可以顯示索引的信息,如 \d 索引名稱
4、\d * 后面也可以跟通配符如 "*" 或 "?",\d x*
5、\d+ 將顯示比 \d 更詳細的信息,還會顯示任何與表關系的注釋,以及表中出現的 OID
6、\dt 只顯示匹配的表
\di 只顯示索引
\ds 只顯示序列
\dv 只顯示視圖
\df 只顯示函數
7、\timing on或off 顯示 SQL 已執行的時間,默認情況下是 off
8、\dn 列出所有的 schema
9、 \du 或 \dg 列出所有的數據庫用戶和角色
10、 \db 顯示所有的表空間,表空間其實是一個目錄,放在這個表空間的表,就是把表的數據文件發到這個表空間下。
11、\dp 或 \z 顯示表的權限分配情況
12、\encoding 指定客戶端的字符編碼,如 \encoding UTF8;
13、\pset 設置輸出的格式,\pset border 0 : 表示輸出內容無邊框。 border 1 :表示邊框只在內部。border 2 :內外都有邊框
14、\x 把表中的每一行的每列數據都拆分為單行展示,與 MySQL 中的 "\G" 的功能類似。
15、\echo 用於輸出一行信息,通常用於在 .sql 文件中輸出一些提示信息。
16、\password 設置密碼
17、\conninfo 列出當前數據庫連接的信息
18、\dx 查看數據庫中安裝的擴展 或 select * from pg_extension;
更多的命令可以用 \? 來顯示
執行存儲在外部文件中的 SQL 命令
\i <文件名> 執行存儲在外部文件中的 sql 語句
當然也可以在 psql 命令行加 "-s <filename>" 來執行 SQL 腳本文件中的命令,如 psql -s test.sql
psql 的使用技巧和注意事項
1、在啟動 psql 命令后中加 "-E" 參數,就可以把 psql 中各種以 "\" 開頭的命令執行的實際 SQL 打印出來,如下 psql -E postgres,如果想關閉此功能,可以使用 "\set ECHO_HIDDEN on | off"
2、自動提交方面的技巧
psql 中的事務是自動提交的,可以運行 begin; 然后執行 dml 語句,最后再執行 commit 或 rollback 語句。或 直接使用 psql 中的命令關閉自動提交的功能。 \set AUTOCOMMIT off
3. 查看數據庫、表、索引大小
select pg_size_pretty(pg_table_size('test'));
select pg_size_pretty(pg_database_size('david'));
select pg_size_pretty(pg_indexes_size('test'));