PostgreSQL 備忘單

2021-08-31 14:37 更新

psql -U john mydbPostgreSQL的小抄為您提供了常見(jiàn)的PostgreSQL的命令和語(yǔ)句。

開(kāi)始

入門(mén)

切換和連接

$ sudo -u postgres psql

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

postgres=# \l

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

postgres=# \c postgres

斷開(kāi)

postgres=# \q
postgres=# \!

psql 命令

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

獲得幫助

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

在 PostgreSQL 控制臺(tái)中運(yùn)行

PostgreSQL 工作

Recon

顯示版本

SHOW SERVER_VERSION;

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

\conninfo

顯示環(huán)境變量

SHOW ALL;

列出用戶(hù)

SELECT rolname FROM pg_roles;

顯示當(dāng)前用戶(hù)

SELECT current_user;

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

\du

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

SELECT current_database();

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

\dt

列出函數(shù)

\df <schema>

數(shù)據(jù)庫(kù)

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

\l

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

\c <database_name>

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

SELECT current_database();

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

CREATE DATABASE <database_name> WITH OWNER <username>;

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

DROP DATABASE IF EXISTS <database_name>;

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

ALTER DATABASE <old_name> RENAME TO <new_name>;

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

\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)建表,使用自動(dòng)遞增的主鍵

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

刪除表

DROP TABLE IF EXISTS <table_name> CASCADE;

權(quán)限

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

sudo su - postgres
psql

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

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

授予數(shù)據(jù)庫(kù)連接權(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>;

授予對(duì)所有表進(jìn)行選擇、更新、插入、刪除的權(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>;

將列更新為自動(dòng)遞增的主鍵

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

插入到表中,使用自動(dòng)遞增的主鍵

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>;

用戶(hù)

列出角色

SELECT rolname FROM pg_roles;

創(chuàng)建用戶(hù)

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

刪除用戶(hù)

DROP USER IF EXISTS <user_name>;

修改用戶(hù)密碼

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 列出表訪問(wèn)權(quán)限
\det[+] 列出外部表

查詢(xún)緩沖區(qū)

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

信息性

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

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

聯(lián)系

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

格式化

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

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

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

變量

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

雜項(xiàng)

—— ——
\cd [DIR] 更改目錄
\timing [on|off] 切換計(jì)時(shí)
\! [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ù)庫(kù)

$ pg_dumpall -U postgres > all.sql

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

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

使用pg_dump -?來(lái)獲得完整的選項(xiàng)列表

恢復(fù)

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

$ psql -U user mydb < mydb_backup.sql

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

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

使用pg_restore -?來(lái)獲得完整的選項(xiàng)列表

遠(yuǎn)程訪問(wèn)

獲取 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

另見(jiàn):復(fù)制

另見(jiàn)


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)