選項 | 說明 |
-a(--data-only) | 只輸出數(shù)據(jù),不輸出模式(數(shù)據(jù)對象的定義)。這個選項只是對純文本格式有意義。對于歸檔格式,你可以在調用pg_restore時指定選項。 |
-b(--blobs) | 在dump中包含大對象。 |
-c(--clean) | 在輸出創(chuàng)建數(shù)據(jù)庫對象的SQL命令之前,先輸出刪除該數(shù)據(jù)庫對象的SQL命令。這個選項只是對純文本格式有意義。對于歸檔格式,你可以在調用 pg_restore時指定選項。 |
-C(--create) | 先輸出創(chuàng)建數(shù)據(jù)庫的命令,之后再重新連接新創(chuàng)建的數(shù)據(jù)庫。對于此種格式的腳本,在運行之前是和哪個數(shù)據(jù)庫進行連接就不這么重要了。這個選項只是對純文本格式有意義。對于歸檔格式,你可以在調用pg_restore時指定選項。 |
-Eencoding | 以指定的字符集創(chuàng)建該dump文件。 |
-ffile | 輸出到指定文件,如果沒有該選項,則輸出到標準輸出。 |
-Fformat |
p(plain): 純文本格式的SQL腳本文件(缺省)。c(custom): 輸出適合于pg_restore的自定義歸檔格式。 這是最靈活的格式,它允許對裝載的數(shù)據(jù)和對象定義進行重新排列。這個格式缺省的時候是壓縮的。t(tar): 輸出適合于pg_restore的tar歸檔文件。使用這個歸檔允許在恢復數(shù)據(jù)庫時重新排序和/或把數(shù)據(jù)庫對象排除在外。同i時也可能可以在恢復的時候限制對哪些數(shù)據(jù)進行恢復。 |
-n schema | 只轉儲schema的內容。如果沒有聲明該選項,目標數(shù)據(jù)庫中的所有非系統(tǒng)模式都會被轉儲。該選項也可以被多次指定,以指定不同pattern的模式。 |
-Nschema | 不轉儲匹配schema的內容,其他規(guī)則和-n一致。 |
-o(--oids) | 作為數(shù)據(jù)的一部分,為每個表都輸出對象標識(OID)。 |
-O(--no-owner) | 不輸出設置對象所有權的SQL命令。 |
-s(--schema-only) | 只輸出對象定義(模式),不輸出數(shù)據(jù)。 |
-Susername | 指定關閉觸發(fā)器時需要用到的超級用戶名。它只有在使用--disable-triggers的時候才有關系。 |
-ttable | 只輸出表的數(shù)據(jù)。很可能在不同模式里面有多個同名表,如果這樣,那么所有匹配的表都將被轉儲。通過多次指定該參數(shù),可以一次轉儲多張表。這里還可以指定和psql一樣的pattern,以便匹配更多的表。(關于pattern,基本的使用方式是可以將它視為unix的通配符,即*表示任意字符,?表示任意單個字符,.(dot)表示schema和object之間的分隔符,如a*.b*,表示以a開頭的schema和以b開頭的數(shù)據(jù)庫對象。如果沒有.(dot),將只是表示數(shù)據(jù)庫對象。這里也可以使用基本的正則表達式,如[0-9]表示數(shù)字。) |
-Ttable | 排除指定的表,其他規(guī)則和-t選項一致。 |
-x(--no-privileges) | 不導出訪問權限信息(grant/revoke命令)。 |
-Z0..9 | 聲明在那些支持壓縮的格式中使用的壓縮級別。 (目前只有自定義格式支持壓縮) |
--column-inserts | 導出數(shù)據(jù)用insert into table_name(columns_list) values(values_list)命令表示,這樣的操作相對其它操作而言是比較慢的,但是在特殊情況下,如數(shù)據(jù)表字段的位置有可能發(fā)生變化或有新的字段插入到原有字段列表的中間等。由于columns_list被明確指定,因此在導入時不會出現(xiàn)數(shù)據(jù)被導入到錯誤字段的問題。 |
--inserts | 導出的數(shù)據(jù)用insert命令表示,而不是copy命令。即便使用insert要比copy慢一些,但是對于今后導入到其他非PostgreSQL的數(shù)據(jù)庫是比較有意義的。 |
--no-tablespaces | 不輸出設置表空間的命令,如果帶有這個選項,所有的對象都將恢復到執(zhí)行pg_restore時的缺省表空間中。 |
--no-unlogged-table-data | 對于不計入日志(unlogged)的數(shù)據(jù)表,不會導出它的數(shù)據(jù),至于是否導出其Schema信息,需要依賴其他的選項而定。 |
-h(--host=host) | 指定PostgreSQL服務器的主機名。 |
-p(--port=port) | 指定服務器的偵聽端口,如不指定,則為缺省的5432。 |
-U(--username=username) | 本次操作的登錄用戶名,如果-O選項沒有指定,此數(shù)據(jù)庫的Owner將為該登錄用戶。 |
-w(--no-password) | 如果當前登錄用戶沒有密碼,可以指定該選項直接登錄。 |
2. 應用示例:
八、pg_restore:
pg_restore用于恢復pg_dump導出的任何非純文本格式的文件,它將數(shù)據(jù)庫重建成保存它時的狀態(tài)。對于歸檔格式的文件,pg_restore可以進行有選擇的恢復,甚至也可以在恢復前重新排列數(shù)據(jù)的順序。
pg_restore可以在兩種模式下操作。如果指定數(shù)據(jù)庫,歸檔將直接恢復到該數(shù)據(jù)庫。否則,必須先手工創(chuàng)建數(shù)據(jù)庫,之后再通過pg_restore恢復數(shù)據(jù)到該新建的數(shù)據(jù)庫中。該命令的使用方式如下:
選項 | 說明 |
filename | 指定要恢復的備份文件,如果沒有聲明,則使用標準輸入。 |
-a(--data-only) | 只恢復數(shù)據(jù),而不恢復表模式(數(shù)據(jù)對象定義)。 |
-c(--clean) | 創(chuàng)建數(shù)據(jù)庫對象前先清理(刪除)它們。 |
-C(--create) | 在恢復數(shù)據(jù)庫之前先創(chuàng)建它。(在使用該選項時,數(shù)據(jù)庫名需要由-d選項指定,該選項只是執(zhí)行最基本的CREATE DATABASE命令。需要說明的是,歸檔文件中所有的數(shù)據(jù)都將恢復到歸檔文件里指定的數(shù)據(jù)庫中)。 |
-ddbname | 與數(shù)據(jù)庫dbname建立連接并且直接恢復數(shù)據(jù)到該數(shù)據(jù)庫中。 |
-e(--exit-on-error) |
如果在向數(shù)據(jù)庫發(fā)送SQL命令的時候遇到錯誤,則退出。缺省是繼續(xù)執(zhí)行并且在恢復結束時顯示一個錯誤計數(shù)。 |
-Fformat | 指定備份文件的格式。由于pg_restore會自動判斷格式,因此指定格式并不是必須的。如果指定,它可以是以下格式之一:t(tar): 使用該格式允許在恢復數(shù)據(jù)庫時重新排序和/或把表模式信息排除出去,同時還可能在恢復時限制裝載的數(shù)據(jù)。 c(custom):該格式是來自pg_dump的自定義格式。這是最靈活的格式,因為它允許重新對數(shù)據(jù)排序,也允許重載表模式信息,缺省情況下這個格式是壓縮的。 |
-I index | 只恢復指定的索引。 |
-l(--list) | 列出備份中的內容,這個操作的輸出可以作為-L選項的輸入。注意,如果過濾選項-n或-t連同-l選項一起使用的話,他們也將限制列出的條目。 |
-L list-file | 僅恢復在list-file中列出的條目,恢復的順序為各個條目在該文件中出現(xiàn)的順序,你也可以手工編輯該文件,并重新排列這些條目的位置,之后再進行恢復操作,其中以分號(;)開頭的行為注釋行,注釋行不會被導入。 |
-n namespace | 僅恢復指定模式(Schema)的數(shù)據(jù)庫對象。該選項可以和-t選項聯(lián)合使用,以恢復指定的數(shù)據(jù)對象。 |
-O(--no-owner) | 不輸出設置對象所有權的SQL命令。 |
-Pfunction-name(argtype [, ...]) |
只恢復指定的命名函數(shù)。該名稱應該和轉儲的內容列表中的完全一致。 |
-s(--schema-only) | 只恢復表結構(數(shù)據(jù)定義)。不恢復數(shù)據(jù),序列值將重置。 |
-Susername | 指定關閉觸發(fā)器時需要用到的超級用戶名。它只有在使用--disable-triggers的時候才有關系。 |
-t table | 只恢復指定表的Schema和/或數(shù)據(jù),該選項也可以連同-n選項指定模式。 |
-x(--no-privileges) | 不恢復訪問權限信息(grant/revoke命令)。 |
-1(--single-transaction) | 在一個單一事物中執(zhí)行恢復命令。這個選項隱含包括了--exit-on-error選項。 |
--no-tablespaces | 不輸出設置表空間的命令,如果帶有這個選項,所有的對象都將恢復到執(zhí)行pg_restore時的缺省表空間中。 |
--no-data-for-failed-tables | 缺省情況下,即使創(chuàng)建表失敗了,如該表已經(jīng)存在,數(shù)據(jù)加載的操作也不會停止,這樣的結果就是很容易導致大量的重復數(shù)據(jù)被插入到該表中。如果帶有該選項,那么一旦出現(xiàn)針對該表的任何錯誤,對該數(shù)據(jù)表的加載將被忽略。 |
--role=rolename | 以指定的角色名執(zhí)行restore的操作。通常而言,如果連接角色沒有足夠的權限用于本次恢復操作,那么就可以利用該選項在建立連接之后再切換到有足夠權限的角色。 |
-h(--host=host) | 指定PostgreSQL服務器的主機名。 |
-p(--port=port) | 指定服務器的偵聽端口,如不指定,則為缺省的5432。 |
-U(--username=username) | 本次操作的登錄用戶名,如果-O選項沒有指定,此數(shù)據(jù)庫的Owner將為該登錄用戶。 |
-w(--no-password) | 如果當前登錄用戶沒有密碼,可以指定該選項直接登錄。 |
2. 應用示例:
九、psql:
PostgreSQL的交互終端,等同于Oracle中的sqlplus。
1. 常用命令行選項列表:
選項 | 說明 |
-c command | 指定psql執(zhí)行一條SQL命令command(用雙引號括起),執(zhí)行后退出。 |
-d dbname | 待連接的數(shù)據(jù)庫名稱。 |
-E | 回顯由\d和其他反斜杠命令生成的實際查詢。 |
-f filename | 使用filename文件中的數(shù)據(jù)作為命令輸入源,而不是交互式讀入查詢。在處理完文件后,psql結束并退出。 |
-h hostname | 聲明正在運行服務器的主機名 |
-l | 列出所有可用的數(shù)據(jù)庫,然后退出。 |
-L filename | 除了正常的輸出源之外,把所有查詢記錄輸出到文件filename。 |
-o filename | 將所有查詢重定向輸出到文件filename。 |
-p port | 指定PostgreSQL服務器的監(jiān)聽端口。 |
-q --quiet | 讓psql安靜地執(zhí)行所處理的任務。缺省時psql將輸出打印歡迎和許多其他信息。 |
-t --tuples-only | 關閉打印列名稱和結果行計數(shù)腳注等信息。 |
-U username | 以用戶username代替缺省用戶與數(shù)據(jù)庫建立連接。 |
2. 應用示例:
3. 內置命令列表:
psql內置命令的格式為反斜杠后面緊跟一個命令動詞,之后是任意參數(shù)。參數(shù)與命令動詞以及其他參數(shù)之間可以用空白符隔開,如果參數(shù)里面包含空白符,該參數(shù)必須用單引號括起,如果參數(shù)內包含單引號,則需要用反斜杠進行轉義,此外單引號內的參數(shù)還支持類似C語言printf函數(shù)所支持的轉義關鍵字,如\t、\n等。
命令 | 說明 |
\a | 如果目前的表輸出格式是不對齊的,切換成對齊的。如果是對齊的,則切換成不對齊。 |
\cd [directory] | 把當前工作目錄切換到directory。沒有參數(shù)則切換到當前用戶的主目錄。 |
\C [title] | 為查詢結果添加表頭(title),如果沒有參數(shù)則取消當前的表頭。 |
\c[dbname[username] ] | 連接新的數(shù)據(jù)庫,同時斷開當前連接。如果dbname參數(shù)為-,表示仍然連接當前數(shù)據(jù)庫。如果忽略username,則表示繼續(xù)使用當前的用戶名。 |
\copy | 其參數(shù)類似于SQL copy,功能則幾乎等同于SQL copy,一個重要的差別是該內置命令可以將表的內容導出到本地,或者是從本地導入到數(shù)據(jù)庫指定的表,而SQL copy則是將表中的數(shù)據(jù)導出到服務器的某個文件,或者是從服務器的文件導入到數(shù)據(jù)表。由此可見,SQL copy的效率要優(yōu)于該內置命令。 |
\d [pattern] | 顯示和pattern匹配的數(shù)據(jù)庫對象,如表、視圖、索引或者序列。顯示所有列,它們的類型,表空間(如果不是缺省的)和任何特殊屬性。 |
\db [pattern] | 列出所有可用的表空間。如果聲明了pattern, 那么只顯示那些匹配模式的表空間。 |
\db+ [pattern] | 和上一個命令相比,還會新增顯示每個表空間的權限信息。 |
\df [pattern] | 列出所有可用函數(shù),以及它們的參數(shù)和返回的數(shù)據(jù)類型。如果聲明了pattern,那么只顯示匹配(正則表達式)的函數(shù)。 |
\df+ [pattern] | 和上一個命令相比,還會新增顯示每個函數(shù)的附加信息,包括語言和描述?! ?/td> |
\distvS [pattern] | 這不是一個單獨命令名稱:字母 i、s、t、v、S 分別代表索引(index)、序列(sequence)、表(table)、視圖(view)和系統(tǒng)表(system table)。你可以以任意順序聲明部分或者所有這些字母獲得這些對象的一個列表。 |
\dn [pattern] | 列出所有可用模式。如果聲明了pattern,那么只列出匹配模式的模式名。 |
\dn+ [pattern] | 和上一個命令相比,還會新增顯示每個對象的權限和注釋。 |
\dp [pattern] | 生成一列可用的表和它們相關的權限。如果聲明了pattern, 那么只列出名字可以匹配模式的表。 |
\dT [pattern] | 列出所有數(shù)據(jù)類型或只顯示那些匹配pattern的。 |
\du [pattern] | 列出所有已配置用戶或者只列出那些匹配pattern的用戶。 |
\echotext [ ... ] | 向標準輸出打印參數(shù),用一個空格分隔并且最后跟著一個新行。如:\echo `date` |
\g[{filename ||command}] | 把當前的查詢結果緩沖區(qū)的內容發(fā)送給服務器并且把查詢的輸出存儲到可選的filename或者把輸出定向到一個獨立的在執(zhí)行 command的Unix shell。 |
\ifilename | 從文件filename中讀取并把其內容當作從鍵盤輸入的那樣執(zhí)行查詢。 |
\l | 列出服務器上所有數(shù)據(jù)庫的名字和它們的所有者以及字符集編碼。 |
\o[{filename ||command}] | 把后面的查詢結果保存到文件filename里或者把后面的查詢結果定向到一個獨立的shell command。 |
\p | 打印當前查詢緩沖區(qū)到標準輸出。 |
\q | 退出psql程序。 |
\r | 重置(清空)查詢緩沖區(qū)。 |
\s [filename] | 將命令行歷史打印出或是存放到filename。如果省略filename,歷史將輸出到標準輸出。 |
\t | 切換是否輸出列/字段名的信息頭和行記數(shù)腳注。 |
\w{filename ||command} | 將當前查詢緩沖區(qū)輸出到文件filename或者定向到Unix命令command。 |
\z [pattern] | 生成一個帶有訪問權限列表的數(shù)據(jù)庫中所有表,視圖和序列的列表。如果給出任何pattern,則被當成一個規(guī)則表達式,只顯示匹配的表,視圖和序列。 |
\!! [command] | 返回到一個獨立的Unix shell或者執(zhí)行Unix命令command。參數(shù)不會被進一步解釋,shell將看到全部參數(shù)。 |
4. 內置命令應用示例:
在psql中,大部分的內置命令都比較易于理解,因此這里只是給出幾個我個人認為相對容易混淆的命令。