PostgreSQL 備忘單

2021-08-31 14:37 更新

psql -U john mydbPostgreSQL的小抄為您提供了常見的PostgreSQL的命令和語句。

開始

入門

切換和連接

$ sudo -u postgres psql

列出所有數(shù)據(jù)庫

postgres=# \l

連接到名為 postgres 的數(shù)據(jù)庫

postgres=# \c postgres

斷開

postgres=# \q
postgres=# \!

psql 命令

選項 例子 描述
[-d] <database> psql -d mydb 連接到數(shù)據(jù)庫
-U psql -U john mydb 以特定用戶身份連接
-h -p psql -h localhost -p 5432 mydb 連接到主機/端口
-U -h -p -d psql -U admin -h 192.168.1.5 -p 2506 -d mydb 連接遠程 PostgreSQL
-W psql -W mydb 強制密碼
-c psql -c '\c postgres' -c '\dt' 執(zhí)行 SQL 查詢或命令
-H psql -c "\l+" -H postgres > database.html 生成 HTML 報告
-l psql -l 列出所有數(shù)據(jù)庫
-f psql mydb -f file.sql 從文件執(zhí)行命令
-V psql -V 打印 psql 版本

獲得幫助

\h 有關(guān) SQL 命令語法的幫助
\h 刪除 DELETE SQL 語句語法
\? PostgreSQL 命令列表

在 PostgreSQL 控制臺中運行

PostgreSQL 工作

Recon

顯示版本

SHOW SERVER_VERSION;

顯示系統(tǒng)狀態(tài)

\conninfo

顯示環(huán)境變量

SHOW ALL;

列出用戶

SELECT rolname FROM pg_roles;

顯示當(dāng)前用戶

SELECT current_user;

顯示當(dāng)前用戶的權(quán)限

\du

顯示當(dāng)前數(shù)據(jù)庫

SELECT current_database();

顯示數(shù)據(jù)庫中的所有表

\dt

列出函數(shù)

\df <schema>

數(shù)據(jù)庫

列出數(shù)據(jù)庫

\l

連接到數(shù)據(jù)庫

\c <database_name>

顯示當(dāng)前數(shù)據(jù)庫

SELECT current_database();

創(chuàng)建數(shù)據(jù)庫

CREATE DATABASE <database_name> WITH OWNER <username>;

刪除數(shù)據(jù)庫

DROP DATABASE IF EXISTS <database_name>;

重命名數(shù)據(jù)庫

ALTER DATABASE <old_name> RENAME TO <new_name>;

列出當(dāng)前數(shù)據(jù)庫中的表

\dt

SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;

全局列出表

\dt *.*.

SELECT * FROM pg_catalog.pg_tables

列出表架構(gòu)

\d <table_name>
\d+ <table_name>

SELECT column_name, data_type, character_maximum_length
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = '<table_name>';

創(chuàng)建表

CREATE TABLE <table_name>(
  <column_name> <column_type>,
  <column_name> <column_type>
);

創(chuàng)建表,使用自動遞增的主鍵

CREATE TABLE <table_name> (
  <column_name> SERIAL PRIMARY KEY
);

刪除表

DROP TABLE IF EXISTS <table_name> CASCADE;

權(quán)限

成為 postgres 用戶,如果您有權(quán)限錯誤

sudo su - postgres
psql

授予對數(shù)據(jù)庫的所有權(quán)限

GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;

授予數(shù)據(jù)庫連接權(quán)限

GRANT CONNECT ON DATABASE <db_name> TO <user_name>;

授予架構(gòu)權(quán)限

GRANT USAGE ON SCHEMA public TO <user_name>;

授予功能權(quán)限

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;

授予對所有表進行選擇、更新、插入、刪除的權(quán)限

GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;

在表上授予權(quán)限

GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;

授予在表上選擇的權(quán)限

GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;

添加列

ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];

更新列

ALTER TABLE <table_name> IF EXISTS
ALTER <column_name> TYPE <data_type> [<constraints>];

刪除列

ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;

將列更新為自動遞增的主鍵

ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;

插入到表中,使用自動遞增的主鍵

INSERT INTO <table_name>
VALUES (DEFAULT, <value1>);


INSERT INTO <table_name> (<column1_name>,<column2_name>)
VALUES ( <value1>,<value2> );

數(shù)據(jù)

[選擇](http://www.postgresql.org/docs/current/static/sql-select.html]所有數(shù)據(jù)

SELECT * FROM <table_name>;

讀取一行數(shù)據(jù)

SELECT * FROM <table_name> LIMIT 1;

搜索數(shù)據(jù)

SELECT * FROM <table_name> WHERE <column_name> = <value>;

插入數(shù)據(jù)

INSERT INTO <table_name> VALUES( <value_1>, <value_2> );

更新數(shù)據(jù)

UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;

刪除所有數(shù)據(jù)

DELETE FROM <table_name>;

刪除特定數(shù)據(jù)

DELETE FROM <table_name>
WHERE <column_name> = <value>;

用戶

列出角色

SELECT rolname FROM pg_roles;

創(chuàng)建用戶

CREATE USER <user_name> WITH PASSWORD '<password>';

刪除用戶

DROP USER IF EXISTS <user_name>;

修改用戶密碼

ALTER ROLE <user_name> WITH PASSWORD '<password>';

模式

列出模式

\dn

SELECT schema_name FROM information_schema.schemata;

SELECT nspname FROM pg_catalog.pg_namespace;

創(chuàng)建模式

CREATE SCHEMA IF NOT EXISTS <schema_name>;

刪除模式

DROP SCHEMA IF EXISTS <schema_name> CASCADE;

PostgreSQL 命令

\d <table> 描述表
\d+ <table> 詳細(xì)描述表格
\dt 列出當(dāng)前架構(gòu)中的表
\dt *.* 列出所有模式中的表
\dt <schema>.* 列出模式的表
\dp 列出表訪問權(quán)限
\det[+] 列出外部表

查詢緩沖區(qū)

—— ——
\e [FILE] 編輯查詢緩沖區(qū)(或文件)
\ef [FUNC] 編輯函數(shù)定義
\p 顯示內(nèi)容
\r 重置(清除)查詢緩沖區(qū)
\s [FILE] 顯示歷史記錄或?qū)⑵浔4娴轿募?/font>
\w FILE 將查詢緩沖區(qū)寫入文件

信息性

\l[+] 列出所有數(shù)據(jù)庫
\dn[S+] 列出模式
\di[S+] 列出索引
\du[+] 列出角色
\ds[S+] 列出序列
\df[antw][S+] 列出函數(shù)
\deu[+] 列出用戶映射
\dv[S+] 列表視圖
\dl 列出大對象
\dT[S+] 列出數(shù)據(jù)類型
\da[S] 列出聚合
\db[+] 列出表空間
\dc[S+] 列出轉(zhuǎn)化次數(shù)
\dC[+] 列出演員表
\ddp 列出默認(rèn)權(quán)限
\dd[S] 顯示對象描述
\dD[S+] 列出域
\des[+] 列出國外服務(wù)器
\dew[+] 列出外部數(shù)據(jù)包裝器
\dF[+] 列出文本搜索配置
\dFd[+] 列出文本搜索詞典
\dFp[+] 列出文本搜索解析器
\dFt[+] 列出文本搜索模板
\dL[S+] 列出過程語言
\do[S] 列出運算符
\dO[S+] 列出排序規(guī)則
\drds 列出每個數(shù)據(jù)庫的角色設(shè)置
\dx[+] 列出擴展

S: 顯示系統(tǒng)對象, +: 附加細(xì)節(jié)

聯(lián)系

\c [DBNAME] 連接到新數(shù)據(jù)庫
\encoding [ENCODING] 顯示或設(shè)置客戶端編碼
\password [USER] 更改密碼
\conninfo 顯示信息

格式化

\a 在未對齊和對齊之間切換
\C [STRING] 設(shè)置表格標(biāo)題,如果沒有則取消設(shè)置
\f [STRING] 顯示或設(shè)置未對齊的字段分隔符
\H 切換 HTML 輸出模式
\t [on|off] 只顯示行
\T [STRING] 設(shè)置或取消設(shè)置 HTML <table> 標(biāo)簽屬性
\x [on|off] 切換擴展輸出

導(dǎo)入導(dǎo)出

\copy ... 導(dǎo)入/導(dǎo)出表
另見: 復(fù)制
\echo [STRING] 打印字符串
\i FILE 執(zhí)行文件
\o [FILE] 將所有結(jié)果導(dǎo)出到文件
\qecho [STRING] 輸出流的字符串

變量

—— ——
\prompt [TEXT] NAME 設(shè)置變量
\set [NAME [VALUE]] 設(shè)置變量(如果沒有參數(shù)則列出所有)
\unset NAME 刪除變量

雜項

—— ——
\cd [DIR] 更改目錄
\timing [on|off] 切換計時
\! [COMMAND] 在 shell 中執(zhí)行
\! ls -l 在 shell 中列出所有內(nèi)容

大型物體

  • \lo_export LOBOID FILE
  • \lo_import FILE [COMMENT]
  • \lo_list
  • \lo_unlink LOBOID

其他

備份

使用 pg_dumpall 備份所有數(shù)據(jù)庫

$ pg_dumpall -U postgres > all.sql

使用 pg_dump 備份數(shù)據(jù)庫

$ pg_dump -d mydb -f mydb_backup.sql
  •   -a   只轉(zhuǎn)儲數(shù)據(jù),不轉(zhuǎn)儲模式
  •   -s   只轉(zhuǎn)儲模式,不轉(zhuǎn)儲數(shù)據(jù)
  •   -c   在重新創(chuàng)建之前刪除數(shù)據(jù)庫
  •   -C   還原前創(chuàng)建數(shù)據(jù)庫
  •   -t   僅轉(zhuǎn)儲命名表
  •   -F   格式(c:自定義,d:目錄,t:tar)

使用pg_dump -?來獲得完整的選項列表

恢復(fù)

使用 psql 恢復(fù)數(shù)據(jù)庫

$ psql -U user mydb < mydb_backup.sql

使用 pg_restore 恢復(fù)數(shù)據(jù)庫

$ pg_restore -d mydb mydb_backup.sql -c
  •   -U   指定數(shù)據(jù)庫用戶
  •   -c   在重新創(chuàng)建之前刪除數(shù)據(jù)庫
  •   -C   還原前創(chuàng)建數(shù)據(jù)庫
  •   -e   如果遇到錯誤則退出
  •   -F   格式(c:自定義,d:目錄,t:tar,:p純文本sql(默認(rèn)))

使用pg_restore -?來獲得完整的選項列表

遠程訪問

獲取 postgresql.conf 的位置

$ psql -U postgres -c 'SHOW config_file'

附加到 postgresql.conf

listen_addresses = '*'

附加到 pg_hba.conf (與 postgresql.conf 相同的位置)

host  all  all  0.0.0.0/0  md5
host  all  all  ::/0       md5

重啟 PostgreSQL 服務(wù)器

$ sudo systemctl resatart postgresql

導(dǎo)入/導(dǎo)出 CSV

將表格導(dǎo)出為 CSV 文件

\copy table TO '<path>' CSV
\copy table(col1,col1) TO '<path>' CSV
\copy (SELECT...) TO '<path>' CSV

將 CSV 文件導(dǎo)入表

\copy table FROM '<path>' CSV
\copy table(col1,col1) FROM '<path>' CSV

另見:復(fù)制

另見


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號