PostgreSQL學習手冊(客戶端命令)
七、pg_dump:
pg_dump是一個用於備份PostgreSQL資料庫的工具。它甚至可以在資料庫正在併發使用時進行完整一致的備份,而不會阻塞其它使用者對資料庫的訪問。該工具生成的轉儲格式可以分為兩種,指令碼和歸檔檔案。其中指令碼格式是包含許多SQL命令的純文字格式,這些SQL命令可以用於重建該資料庫並將之恢復到生成此指令碼時的狀態,該操作需要使用psql來完成。至於歸檔格式,如果需要重建資料庫就必須和pg_restore工具一起使用。在重建過程中,可以對恢復的物件進行選擇,甚至可以在恢復之前對需要恢復的條目進行重新排序。該命令的使用方式如下:
pg_dump [option...] [dbname]
1. 命令列選項列表:
選項 | 說明 |
-a(--data-only) | 只輸出資料,不輸出模式(資料物件的定義)。這個選項只是對純文字格式有意義。對於歸檔格式,你可以在呼叫pg_restore時指定選項。 |
-b(--blobs) | 在dump中包含大物件。 |
-c(--clean) | 在輸出建立資料庫物件的SQL命令之前,先輸出刪除該資料庫物件的SQL命令。這個選項只是對純文字格式有意義。對於歸檔格式,你可以在呼叫 pg_restore時指定選項。 |
-C(--create) | 先輸出建立資料庫的命令,之後再重新連線新建立的資料庫。對於此種格式的指令碼,在執行之前是和哪個資料庫進行連線就不這麼重要了。這個選項只是對純文字格式有意義。對於歸檔格式,你可以在呼叫pg_restore時指定選項。 |
-Eencoding | 以指定的字符集建立該dump檔案。 |
-ffile | 輸出到指定檔案,如果沒有該選項,則輸出到標準輸出。 |
-Fformat |
p(plain): 純文字格式的SQL指令碼檔案(預設)。c(custom): 輸出適合於pg_restore的自定義歸檔格式。 這是最靈活的格式,它允許對裝載的資料和物件定義進行重新排列。這個格式預設的時候是壓縮的。t(tar): 輸出適合於 pg_restore的tar歸檔檔案。使用這個歸檔允許在恢復資料庫時重新排序和/或把資料庫物件排除在外。同i時也可能可以在恢復的時候限制對哪些資料進行恢復。 |
-n schema | 只轉儲schema的內容。如果沒有宣告該選項,目標資料庫中的所有非系統模式都會被轉儲。該選項也可以被多次指定,以指定不同pattern的模式。 |
-Nschema | 不轉儲匹配schema的內容,其他規則和-n一致。 |
-o(--oids) | 作為資料的一部分,為每個表都輸出物件標識(OID)。 |
-O(--no-owner) | 不輸出設定物件所有權的SQL命令。 |
-s(--schema-only) | 只輸出物件定義(模式),不輸出資料。 |
-Susername | 指定關閉觸發器時需要用到的超級使用者名稱。它只有在使用--disable-triggers的時候才有關係。 |
-ttable | 只輸出表的資料。很可能在不同模式裡面有多個同名表,如果這樣,那麼所有匹配的表都將被轉儲。通過多次指定該引數,可以一次轉儲多張表。這裡還可以指定和psql一樣的pattern,以便匹配更多的表。(關於pattern,基本的使用方式是可以將它視為unix的萬用字元,即*表示任意字元,?表示任意單個字元,.(dot)表示schema和object之間的分隔符,如a*.b*,表示以a開頭的schema和以b開頭的資料庫物件。如果沒有.(dot),將只是表示資料庫物件。這裡也可以使用基本的正規表示式,如[0-9]表示數字。) |
-Ttable | 排除指定的表,其他規則和-t選項一致。 |
-x(--no-privileges) | 不匯出訪問許可權資訊(grant/revoke命令)。 |
-Z0..9 | 宣告在那些支援壓縮的格式中使用的壓縮級別。 (目前只有自定義格式支援壓縮) |
--column-inserts | 匯出資料用insert into table_name(columns_list) values(values_list)命令表示,這樣的操作相對其它操作而言是比較慢的,但是在特殊情況下,如資料表欄位的位置有可能發生變化或有新的欄位插入到原有欄位列表的中間等。由於columns_list被明確指定,因此在匯入時不會出現資料被匯入到錯誤欄位的問題。 |
--inserts | 匯出的資料用insert命令表示,而不是copy命令。即便使用insert要比copy慢一些,但是對於今後匯入到其他非PostgreSQL的資料庫是比較有意義的。 |
--no-tablespaces | 不輸出設定表空間的命令,如果帶有這個選項,所有的物件都將恢復到執行pg_restore時的預設表空間中。 |
--no-unlogged-table-data | 對於不計入日誌(unlogged)的資料表,不會匯出它的資料,至於是否匯出其Schema資訊,需要依賴其他的選項而定。 |
-h(--host=host) | 指定PostgreSQL伺服器的主機名。 |
-p(--port=port) | 指定伺服器的偵聽埠,如不指定,則為預設的5432。 |
-U(--username=username) | 本次操作的登入使用者名稱,如果-O選項沒有指定,此資料庫的Owner將為該登入使用者。 |
-w(--no-password) | 如果當前登入使用者沒有密碼,可以指定該選項直接登入。 |
2. 應用示例:
# -h: PostgreSQL伺服器的主機為192.168.149.137。
# -U: 登入使用者為postgres。
# -t: 匯出表名以test開頭的資料表,如testtable。
# -a: 僅僅匯出資料,不匯出物件的schema資訊。
# -f: 輸出檔案是當前目錄下的my_dump.sql
# mydatabase是此次操作的目標資料庫。
/> pg_dump -h 192.168.149.137 -U postgres -t test* -a -f ./my_dump.sql mydatabase
#-c: 先輸出刪除資料庫物件的SQL命令,在輸出建立資料庫物件的SQL命令,這對於部署乾淨的初始系統或是搭建測試環境都非常方便。
/> pg_dump -h 192.168.220.136 -U postgres -c -f ./my_dump.sql mydatabase
#匯出mydatabase資料庫的資訊。在通過psql命令匯入時可以重新指定資料庫,如:/> psql -d newdb -f my_dump.sql
/> pg_dump -h 192.168.220.136 -U postgres -f ./my_dump.sql mydatabase
#匯出模式為my_schema和以test開頭的資料庫物件名,但是不包括my_schema.employee_log物件。
/> pg_dump -t 'my_schema.test*' -T my_schema.employee_log mydatabase > my_dump.sql
#匯出east和west模式下的所有資料庫物件。下面兩個命令是等同的,只是後者使用了正則。
/> pg_dump -n 'east' -n 'west' mydatabase -f my_dump.sql
/> pg_dump -n '(east|west)' mydatabase -f my_dump.sql
八、pg_restore:
pg_restore用於恢復pg_dump匯出的任何非純文字格式的檔案,它將資料庫重建成儲存它時的狀態。對於歸檔格式的檔案,pg_restore可以進行有選擇的恢復,甚至也可以在恢復前重新排列資料的順序。
pg_restore可以在兩種模式下操作。如果指定資料庫,歸檔將直接恢復到該資料庫。否則,必須先手工建立資料庫,之後再通過pg_restore恢復資料到該新建的資料庫中。該命令的使用方式如下:
pg_restore [option...] [filename]
1. 命令列選項列表:
選項 | 說明 |
filename | 指定要恢復的備份檔案,如果沒有宣告,則使用標準輸入。 |
-a(--data-only) | 只恢復資料,而不恢復表模式(資料物件定義)。 |
-c(--clean) | 建立資料庫物件前先清理(刪除)它們。 |
-C(--create) | 在恢復資料庫之前先建立它。(在使用該選項時,資料庫名需要由-d選項指定,該選項只是執行最基本的CREATE DATABASE命令。需要說明的是,歸檔檔案中所有的資料都將恢復到歸檔檔案裡指定的資料庫中)。 |
-ddbname | 與資料庫dbname建立連線並且直接恢復資料到該資料庫中。 |
-e(--exit-on-error) |
如果在向資料庫傳送SQL命令的時候遇到錯誤,則退出。預設是繼續執行並且在恢復結束時顯示一個錯誤計數。 |
-Fformat | 指定備份檔案的格式。由於pg_restore會自動判斷格式,因此指定格式並不是必須的。如果指定,它可以是以下格式之一:t(tar): 使用該格式允許在恢復資料庫時重新排序和/或把表模式資訊排除出去,同時還可能在恢復時限制裝載的資料。 c(custom):該格式是來自pg_dump的自定義格式。這是最靈活的格式,因為它允許重新對資料排序,也允許過載表模式資訊,預設情況下這個格式是壓縮的。 |
-I index | 只恢復指定的索引。 |
-l(--list) | 列出備份中的內容,這個操作的輸出可以作為-L選項的輸入。注意,如果過濾選項-n或-t連同-l選項一起使用的話,他們也將限制列出的條目。 |
-L list-file | 僅恢復在list-file中列出的條目,恢復的順序為各個條目在該檔案中出現的順序,你也可以手工編輯該檔案,並重新排列這些條目的位置,之後再進行恢復操作,其中以分號(;)開頭的行為註釋行,註釋行不會被匯入。 |
-n namespace | 僅恢復指定模式(Schema)的資料庫物件。該選項可以和-t選項聯合使用,以恢復指定的資料物件。 |
-O(--no-owner) | 不輸出設定物件所有權的SQL命令。 |
-Pfunction-name(argtype [, ...]) |
只恢復指定的命名函式。該名稱應該和轉儲的內容列表中的完全一致。 |
-s(--schema-only) | 只恢復表結構(資料定義)。不恢復資料,序列值將重置。 |
-Susername | 指定關閉觸發器時需要用到的超級使用者名稱。它只有在使用--disable-triggers的時候才有關係。 |
-t table | 只恢復指定表的Schema和/或資料,該選項也可以連同-n選項指定模式。 |
-x(--no-privileges) | 不恢復訪問許可權資訊(grant/revoke命令)。 |
-1(--single-transaction) | 在一個單一事物中執行恢復命令。這個選項隱含包括了--exit-on-error選項。 |
--no-tablespaces | 不輸出設定表空間的命令,如果帶有這個選項,所有的物件都將恢復到執行pg_restore時的預設表空間中。 |
--no-data-for-failed-tables | 預設情況下,即使建立表失敗了,如該表已經存在,資料載入的操作也不會停止,這樣的結果就是很容易導致大量的重複資料被插入到該表中。如果帶有該選項,那麼一旦出現針對該表的任何錯誤,對該資料表的載入將被忽略。 |
--role=rolename | 以指定的角色名執行restore的操作。通常而言,如果連線角色沒有足夠的許可權用於本次恢復操作,那麼就可以利用該選項在建立連線之後再切換到有足夠許可權的角色。 |
-h(--host=host) | 指定PostgreSQL伺服器的主機名。 |
-p(--port=port) | 指定伺服器的偵聽埠,如不指定,則為預設的5432。 |
-U(--username=username) | 本次操作的登入使用者名稱,如果-O選項沒有指定,此資料庫的Owner將為該登入使用者。 |
-w(--no-password) | 如果當前登入使用者沒有密碼,可以指定該選項直接登入。 |
2. 應用示例:
#先通過createdb命令,以myuser使用者的身份登入,建立帶恢復的資料newdb
/> createdb -U myuser newdb
#用pg_restore命令的-l選項匯出my_dump.dat備份檔案中匯出資料庫物件的明細列表。
/> pg_restore -l my_dump.dat > db.list
/> cat db.list
2; 145344 TABLE species postgres
4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
8; 145416 TABLE ss_old postgres
10; 145433 TABLE map_resolutions postgres
#將以上列表檔案中的內容修改為以下形式。
#主要的修改是註釋掉編號為2、4和8的三個資料庫物件,同時編號10的物件放到該檔案的頭部,這樣在基於該列表
#檔案匯入時,2、4和8等三個物件將不會被匯入,在恢復的過程中將先匯入編號為10的物件的資料,再匯入物件6的資料。
/> cat new_db.list
10; 145433 TABLE map_resolutions postgres
;2; 145344 TABLE species postgres
;4; 145359 TABLE nt_header postgres
6; 145402 TABLE species_records postgres
;8; 145416 TABLE ss_old postgres
#恢復時指定的資料庫是newdb,匯入哪些資料庫物件和匯入順序將會按照new_db.list檔案中提示的規則匯入。
/> pg_restore -d newdb -L new_db.list my_dump.dat
九、psql:
PostgreSQL的互動終端,等同於Oracle中的sqlplus。
1. 常用命令列選項列表:
選項 | 說明 |
-c command | 指定psql執行一條SQL命令command(用雙引號括起),執行後退出。 |
-d dbname | 待連線的資料庫名稱。 |
-E | 回顯由\d和其他反斜槓命令生成的實際查詢。 |
-f filename | 使用filename檔案中的資料作為命令輸入源,而不是互動式讀入查詢。在處理完檔案後,psql結束並退出。 |
-h hostname | 宣告正在執行伺服器的主機名 |
-l | 列出所有可用的資料庫,然後退出。 |
-L filename | 除了正常的輸出源之外,把所有查詢記錄輸出到檔案filename。 |
-o filename | 將所有查詢重定向輸出到檔案filename。 |
-p port | 指定PostgreSQL伺服器的監聽埠。 |
-q --quiet | 讓psql安靜地執行所處理的任務。預設時psql將輸出列印歡迎和許多其他資訊。 |
-t --tuples-only | 關閉列印列名稱和結果行計數腳註等資訊。 |
-U username | 以使用者username代替預設使用者與資料庫建立連線。 |
2. 命令列選項應用示例:
#-d: 指定連線的資料庫。
#-U: 指定連線的使用者。
#-c: 後面的SQL語句是本次操作需要執行的命令。
/> psql -d posgres -U postgres -c "select * from testtable"
i
---
1
2
3
5
(4 rows)
#-t: 沒有輸出上面輸出結果中的欄位標題資訊和行數統計資訊。
#-q:該選項和-t選項聯合使用,非常有利於自動化指令碼。如:
# select 'copy ' || tablename || ' to ' || tablename || '.sql' from pg_tables
#由以上sql語句生成的結果集,在重定向到輸出檔案後,可以作為下一次psql的輸入執行。
/> psql -t -q -c "select * from testtable"
1
2
3
5
#-l: 列出當前系統中可用的資料庫。
/> psql -l
List of databases
Name | Owner | Encoding | Collation | Ctype | Access privileges
------------+----------+----------+-------------+-------------+-----------------------
mydatabase | myuser | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
postgres | postgres | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
... ...
(4 rows)
#-o: 將查詢語句的資料結果輸出到指定檔案。
/> psql -c "select * from testtable" -o out
/> cat out
i
---
1
2
3
5
(4 rows)
3. 內建命令列表:
psql內建命令的格式為反斜槓後面緊跟一個命令動詞,之後是任意引數。引數與命令動詞以及其他引數之間可以用空白符隔開,如果引數裡面包含空白符,該引數必須用單引號括起,如果引數內包含單引號,則需要用反斜槓進行轉義,此外單引號內的引數還支援類似C語言printf函式所支援的轉義關鍵字,如\t、\n等。
命令 | 說明 |
\a | 如果目前的表輸出格式是不對齊的,切換成對齊的。如果是對齊的,則切換成不對齊。 |
\cd [directory] | 把當前工作目錄切換到directory。沒有引數則切換到當前使用者的主目錄。 |
\C [title] | 為查詢結果新增表頭(title),如果沒有引數則取消當前的表頭。 |
\c[dbname [username] ] | 連線新的資料庫,同時斷開當前連線。如果dbname引數為-,表示仍然連線當前資料庫。如果忽略username,則表示繼續使用當前的使用者名稱。 |
\copy | 其引數類似於SQL copy,功能則幾乎等同於SQL copy,一個重要的差別是該內建命令可以將表的內容匯出到本地,或者是從本地匯入到資料庫指定的表,而SQL copy則是將表中的資料匯出到伺服器的某個檔案,或者是從伺服器的檔案匯入到資料表。由此可見,SQL copy的效率要優於該內建命令。 |
\d [pattern] | 顯示和pattern匹配的資料庫物件,如表、檢視、索引或者序列。顯示所有列,它們的型別,表空間(如果不是預設的)和任何特殊屬性。 |
\db [pattern] | 列出所有可用的表空間。如果宣告瞭pattern, 那麼只顯示那些匹配模式的表空間。 |
\db+ [pattern] | 和上一個命令相比,還會新增顯示每個表空間的許可權資訊。 |
\df [pattern] | 列出所有可用函式,以及它們的引數和返回的資料型別。如果宣告瞭pattern,那麼只顯示匹配(正規表示式)的函式。 |
\df+ [pattern] | 和上一個命令相比,還會新增顯示每個函式的附加資訊,包括語言和描述。 |
\distvS [pattern] | 這不是一個單獨命令名稱:字母 i、s、t、v、S 分別代表索引(index)、序列(sequence)、表(table)、檢視(view)和系統表(system table)。你可以以任意順序宣告部分或者所有這些字母獲得這些物件的一個列表。 |
\dn [pattern] | 列出所有可用模式。如果宣告瞭pattern,那麼只列出匹配模式的模式名。 |
\dn+ [pattern] | 和上一個命令相比,還會新增顯示每個物件的許可權和註釋。 |
\dp [pattern] | 生成一列可用的表和它們相關的許可權。如果宣告瞭pattern, 那麼只列出名字可以匹配模式的表。 |
\dT [pattern] | 列出所有資料型別或只顯示那些匹配pattern的。 |
\du [pattern] | 列出所有已配置使用者或者只列出那些匹配pattern的使用者。 |
\echotext [ ... ] | 向標準輸出列印引數,用一個空格分隔並且最後跟著一個新行。如:\echo `date` |
\g[{filename ||command}] | 把當前的查詢結果緩衝區的內容傳送給伺服器並且把查詢的輸出儲存到可選的filename或者把輸出定向到一個獨立的在執行 command的Unix shell。 |
\ifilename | 從檔案filename中讀取並把其內容當作從鍵盤輸入的那樣執行查詢。 |
\l | 列出伺服器上所有資料庫的名字和它們的所有者以及字符集編碼。 |
\o[{filename ||command}] | 把後面的查詢結果儲存到檔案filename裡或者把後面的查詢結果定向到一個獨立的shell command。 |
\p | 列印當前查詢緩衝區到標準輸出。 |
\q | 退出psql程式。 |
\r | 重置(清空)查詢緩衝區。 |
\s [filename] | 將命令列歷史列印出或是存放到filename。如果省略filename,歷史將輸出到標準輸出。 |
\t | 切換是否輸出列/欄位名的資訊頭和行記數腳註。 |
\w{filename ||command} | 將當前查詢緩衝區輸出到檔案filename或者定向到Unix命令command。 |
\z [pattern] | 生成一個帶有訪問許可權列表的資料庫中所有表,檢視和序列的列表。如果給出任何pattern,則被當成一個規則表示式,只顯示匹配的表,檢視和序列。 |
\! [command] | 返回到一個獨立的Unix shell或者執行Unix命令command。引數不會被進一步解釋,shell將看到全部引數。 |
4. 內建命令應用示例:
在psql中,大部分的內建命令都比較易於理解,因此這裡只是給出幾個我個人認為相對容易混淆的命令。
# \c: 其中橫線(-)表示仍然連線當前資料庫,myuser是新的使用者名稱。
postgres=# \c - myuser
Password for user myuser:
postgres=> SELECT user;
current_user
--------------
myuser
(1 row)
# 執行任意SQL語句。
postgres=# SELECT * FROM testtable WHERE i = 2;
i
---
2
(1 row)
# \g 命令會將上一個SQL命令的結果輸出到指定檔案。
postgres=# \g my_file_for_command_g
postgres=# \! cat my_file_for_command_g
i
---
2
(1 row)
# \g 命令會將上一個SQL命令的結果從管道輸出到指定的Shell命令,如cat。
postgres=# \g | cat
i
---
2
(1 row)
# \p 列印上一個SQL命令。
postgres=# \p
SELECT * FROM testtable WHERE i = 2;
# \w 將上一個SQL命令輸出到指定的檔案。
postgres=# \w my_file_for_option_w
postgres=# \! cat my_file_for_option_w
SELECT * FROM testtable WHERE i = 2;
# \o 和\g相反,該命令會將後面psql命令的輸出結果輸出到指定的檔案,直到遇到下一個獨立的\o,
# 此後的命令結果將不再輸出到該檔案。
postgres=# \o my_file_for_option_o
postgres=# SELECT * FROM testtable WHERE i = 1;
# 終止後面的命令結果也輸出到my_file_for_option_o檔案中。
postgres=# \o
postgres=# \! cat my_file_for_option_o
i
---
1
(1 row)
轉載:http://www.cnblogs.com/stephen-liu74/archive/2012/06/01/2307813.html
相關文章
- PostgreSQL學習手冊(客戶端命令<一>)SQL客戶端
- PostgreSQL學習手冊(客戶端命令<二>)SQL客戶端
- PostgreSQL - psql(客戶端互動命令)SQL客戶端
- PostgreSQL學習手冊(索引)SQL索引
- PostgreSQL學習手冊(模式Schema)SQL模式
- PostgreSQL學習手冊(資料表)SQL
- PostgreSQL學習手冊(事物隔離)SQL
- PostgreSQL學習手冊(系統表)SQL
- Nacos - 客戶端註冊客戶端
- 註冊客戶端事件客戶端事件
- LightDB/PostgreSQL 客戶端部署SQL客戶端
- PostgreSQL學習手冊(效能提升技巧)SQL
- PostgreSQL學習手冊(資料庫管理)SQL資料庫
- PostgreSQL學習手冊(系統檢視)SQL
- PostgreSQL學習手冊(伺服器配置)SQL伺服器
- PostgreSQL學習手冊(常用資料型別)SQL資料型別
- PostgreSQL學習手冊(角色和許可權)SQL
- PostgreSQL學習手冊(資料庫維護)SQL資料庫
- PostgreSQL學習手冊(SQL語言函式)SQL函式
- ZooKeeper客戶端CRUD命令客戶端
- Redis學習手冊(Key操作命令)Redis
- Redis學習筆記(十) 客戶端Redis筆記客戶端
- 實用的PostgreSQL客戶端:Postico for MacSQL客戶端Mac
- PostgreSQL學習手冊(函式和操作符)SQL函式
- PostgreSQL學習手冊(PL/pgSQL過程語言)SQL
- Oauth2(2)客戶端註冊OAuth客戶端
- PostgreSQL學習手冊(表的繼承和分割槽)SQL繼承
- PostgreSQL學習手冊(函式和操作符<一>)SQL函式
- PostgreSQL學習手冊(函式和操作符<二>)SQL函式
- PostgreSQL學習手冊(函式和操作符<三>)SQL函式
- 命令列客戶端MySQL如何使用命令列客戶端MySql
- ElasticSearch-命令列客戶端操作Elasticsearch命令列客戶端
- Zookeeper--客戶端基礎命令客戶端
- Clickhouse-客戶端查詢命令客戶端
- PostgreSQL客戶端處理事務功能詳解EGSQL客戶端
- 羽毛球群檔案--客戶手冊
- Golang 學習筆記(一) - HTTP 客戶端 - 基礎Golang筆記HTTP客戶端
- 學習筆記:客戶端物件層次(一):BOM筆記客戶端物件