PostgreSQL7.0手冊-管理員手冊-31. 管理數(shù)據(jù)庫
2019-09-08 23:33:51
供稿:網(wǎng)友
第三十一章. 管理數(shù)據(jù)庫
內(nèi)容
創(chuàng)建數(shù)據(jù)庫
訪問數(shù)據(jù)庫
管理數(shù)據(jù)庫
備份和恢復(fù)
如果 Postgrespostmaster 已經(jīng)就緒并且運(yùn)行起來了,那么我們就可以創(chuàng)建一些數(shù)據(jù)庫做一些試驗了.這里我們描述管理數(shù)據(jù)庫的基本命令.
創(chuàng)建數(shù)據(jù)庫
我們假設(shè)你要創(chuàng)建一個名為 mydb 的數(shù)據(jù)庫.你可以用下面命令做這件事情:
% createdb dbname
Postgres 允許你在一個節(jié)點(diǎn)上創(chuàng)建任意數(shù)量的數(shù)據(jù)庫,并且你自動成為該數(shù)據(jù)庫的管理員.?dāng)?shù)據(jù)庫名必須以字母開頭而且少于 31 個字符長(譯注:可以通過配置和重新編譯 postgres 改變這個值。).并不是任何用戶都有權(quán)利成為數(shù)據(jù)庫管理員.如果Postgres拒絕為你創(chuàng)建數(shù)據(jù)庫,那么節(jié)點(diǎn)管理員有必要賦予你創(chuàng)建數(shù)據(jù)庫的權(quán)限.如果出現(xiàn)這種現(xiàn)象,請與你的節(jié)點(diǎn)管理員聯(lián)系.
--------------------------------------------------------------------------------
訪問數(shù)據(jù)庫
一旦你已經(jīng)建立了一個數(shù)據(jù)庫,你可以用下面方法訪問它:
運(yùn)行 Postgres 的終端控制程序(SQL界面)(psql),它允許你交互地輸入,編輯和執(zhí)行 SQL 命令.
寫一個利用 libpq 子過程庫的 C 程序.它允許你在 C 里面提交一個 SQL 命令,然后再收到返回和狀態(tài)信息.這個接口將在 PostgreSQL 程序員手冊 中進(jìn)一步討論.
你可能希望運(yùn)行起 psql,然后把本手冊的例子試驗一下.這個可以通過用下面命令激活數(shù)據(jù)庫 dbname 進(jìn)行:
psql dbname
你將看到如下歡迎信息:
Welcome to psql, the PostgreSQL interactive terminal.
Type: /copyright for distribution terms
/h for help with SQL commands
/? for help on internal slash commands
/g or terminate with semicolon to execute query
/q to quit
dbname=>
這個提示符表示SQL界面正在偵聽你的輸入,因此你可以鍵入 SQL 查詢到由SQL界面維護(hù)的工作區(qū)中.psql 程序響應(yīng)由反斜杠 "/" 開頭的轉(zhuǎn)意字符.例如,你可以鍵入下面命令獲得關(guān)于各種 PostgresSQL 命令的語法的幫助:
dbname=> /h
一旦你完成了向工作區(qū)中查詢的輸入,你可以鍵入下面命令把工作區(qū)的內(nèi)容提交給 Postgres 服務(wù)器:
dbname=> /g
這個命令告訴服務(wù)器執(zhí)行查詢.如果你以分號結(jié)束查詢(語句),上面的反斜杠-g就不必輸入了.psql 會自動處理分號結(jié)尾的查詢.如果要從一個文件里讀入查詢,而不是交互地輸入,鍵入:
dbname=> /i filename
從 psql 退回到 UNIX,鍵入
dbname=> /q
psql 將退出并且回到你的命令行 shell.(要知道更多的轉(zhuǎn)意字符信息,在SQL界面提示符上鍵入反斜杠-h.)在 SQL 查詢里面可以隨意使用空白(例如,空格,tabs 和 新行).單行注釋用 “--”(破折號).在破折號后面到行尾的所有內(nèi)容都被忽略.多行注釋以及行內(nèi)注釋,用 “/* ... */”-- 從 Ingres 借來的習(xí)慣。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
刪除數(shù)據(jù)庫
如果你是數(shù)據(jù)庫 mydb 的數(shù)據(jù)庫管理員,你可以用下面 UNIX 命令將其刪除:
% dropdb dbname
這個動作物理上刪除所有與該數(shù)據(jù)庫相關(guān)的 UNIX 文件,而且是不可逆的,所以在這么做之前你必須要考慮清楚.
還可以用下面語句在一次 SQL 會話里刪除一個數(shù)據(jù)庫。(譯注:但不能是正在聯(lián)接的數(shù)據(jù)庫。)
> drop database dbname
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
備份和恢復(fù)
注意
每個數(shù)據(jù)庫都應(yīng)該經(jīng)常備份。因為 Postgres 在文件系統(tǒng)里管理它自己的文件,我們不建議依靠你的文件系統(tǒng)的系統(tǒng)備份作為你的數(shù)據(jù)庫備份;那樣不能保證在恢復(fù)后文件處于可用的一致的狀態(tài)。
Postgres 提供兩個工具備份你的系統(tǒng):pg_dump 備份獨(dú)立的數(shù)據(jù)庫以及 pg_dumpall 在一個步驟里備份你的數(shù)據(jù)庫節(jié)點(diǎn)。
可以用下面的命令備份一個獨(dú)立的數(shù)據(jù)庫:
% pg_dump dbname > dbname.pgdump
然后可以用下面命令恢復(fù)
cat dbname.pgdump | psql dbname
這個技巧可以用于把數(shù)據(jù)庫移動到一個新位置,然后重新命名現(xiàn)有數(shù)據(jù)庫。
大數(shù)據(jù)庫
作者:由 Hannu Krosing 寫于 1999-06-19。
因為 Postgres 允許表的尺寸大于你的系統(tǒng)的最大文件尺寸,可能把表輸出到一個文件會有問題,因為生成的文件很可能比你的系統(tǒng)允許的最大文件大。
因為 pg_dump 輸出到 stdout,你可以用標(biāo)準(zhǔn)的 *nix 工具繞開這個問題:
使用壓縮的 輸出:
% pg_dump dbname | gzip > filename.dump.gz
重載:
% createdb dbname
% gunzip -c filename.dump.gz | psql dbname
或
% cat filename.dump.gz | gunzip | psql dbname
使用分割(split):
% pg_dump dbname | split -b 1m - filename.dump.
重載:
% createdb dbname
% cat filename.dump.* | pgsql dbname
當(dāng)然,文件名(filename)和 pg_dump 輸出的內(nèi)容不必與數(shù)據(jù)庫名一樣。同樣,重載的數(shù)據(jù)庫可以有任意新的名稱,所以這個機(jī)制還適用于給數(shù)據(jù)庫改名。
--------------------------------------------------------------------------------