linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库
六、從純文本格式的備份文件恢復(fù)數(shù)據(jù)庫
下面我們詳細(xì)介紹如何使用psql程序從一個(gè)純文本格式的備份文件恢復(fù)數(shù)據(jù)庫。
注意:如果您使用的是Postgres Plus Advanced Server的話,那么可以使用edb-psql程序。
上面,我們?yōu)閿?shù)據(jù)庫sample建立了一個(gè)純文本格式的備份文件,即sample_backup,之后我們要用它來恢復(fù)該示例數(shù)據(jù)庫。
第一步:登錄到Postgres Plus數(shù)據(jù)庫服務(wù)器所在的計(jì)算機(jī)。在該計(jì)算機(jī)上任何有效的帳戶都可以。
第二步:如果想把數(shù)據(jù)庫恢復(fù)到建立備份文件的數(shù)據(jù)庫集群之外的數(shù)據(jù)庫集群的話,或者從數(shù)據(jù)庫集群中刪除了角色的話,那么要確保制作備份文件時(shí)數(shù)據(jù)庫對象屬主的所有的角色名稱都存在于用來恢復(fù)備份文件的數(shù)據(jù)庫集群中。
注意:如果制作備份文件時(shí)不知道數(shù)據(jù)庫對象屬于哪些角色,您可以使用文本編輯程序搜索ALTER object OWNER TO role語句,下面是些例子:
ALTERPROCEDURAL LANGUAGE plpgsql OWNERTOpostgres;ALTERTYPEpublic.emp_query_type OWNERTOpostgres;ALTERFUNCTIONpublic.emp_comp(p_sal numeric, p_comm numeric) OWNERTOpostgres;
您可以通過psql程序連接到數(shù)據(jù)庫集群,然后運(yùn)行\(zhòng)dg命令列出當(dāng)前存在于數(shù)據(jù)庫集群中的角色,如下所示:
$ cd/opt/PostgresPlus/8.4SS/bin
$ ./psql-d postgres-U postgres
Passwordforuserpostgres:
psql (8.4.1)
Type "help"forhelp.
postgres=# \dg
Listofroles
Role name|Attributes|Memberof-----------+-------------+-----------postgres|Superuser|{}
:Createrole
:CreateDB
如果您需要?jiǎng)?chuàng)建角色的話,可以使用CREATE ROLE語句。
注意:如果用來恢復(fù)數(shù)據(jù)庫對象的數(shù)據(jù)庫集群中沒有該數(shù)據(jù)庫對象原屬主的角色,那么當(dāng)ALTER語句無法指定該屬主時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。當(dāng)執(zhí)行恢復(fù)操作時(shí),該數(shù)據(jù)庫對象最終將分配給psql程序的-U選項(xiàng)指定的角色。
第三步:保證在用于恢復(fù)數(shù)據(jù)庫的數(shù)據(jù)庫集群中沒有與制作備份的數(shù)據(jù)庫同名的數(shù)據(jù)庫。
注意:如果不知道制作備份文件的數(shù)據(jù)庫的名稱,您可以使用文本編輯程序搜索CREATE DATABASE語句,下面舉例說明:
CREATEDATABASEsampleWITHTEMPLATE=template0 ENCODING='UTF8'LC_COLLATE='en_US.UTF-8'LC_CTYPE='en_US.UTF-8';
您可以通過psql程序連接到數(shù)據(jù)庫集群,然后運(yùn)行\(zhòng)l命令列出當(dāng)前存在于數(shù)據(jù)庫集群中的數(shù)據(jù)庫,如下所示:
$ cd/opt/PostgresPlus/8.4SS/bin
$ ./psql-d postgres-U postgres
Passwordforuserpostgres:
psql (8.4.1)
Type "help"forhelp.
postgres=# \l
Listofdatabases
Name|Owner|Encoding|Collation|Ctype|Accessprivileges-----------+----------+----------+-------------+-------------+-----------------------postgres|postgres|UTF8|en_US.UTF-8|en_US.UTF-8|template0|postgres|UTF8|en_US.UTF-8|en_US.UTF-8|=c/postgres
: postgres=CTc/postgres
template1|postgres|UTF8|en_US.UTF-8|en_US.UTF-8|=c/postgres
: postgres=CTc/postgres
(3rows)
如果數(shù)據(jù)庫集群中的一個(gè)數(shù)據(jù)庫與用于建立備份文件的數(shù)據(jù)庫同名,那么您現(xiàn)在就可以使用ALTER DATABASE語句的RENAME TO選項(xiàng)給現(xiàn)有的數(shù)據(jù)庫改名,或者使用DROP DATABASE語句刪除它。
注意:在恢復(fù)操作期間,如果該數(shù)據(jù)庫集群含有一個(gè)與制作備份文件的數(shù)據(jù)庫同名的數(shù)據(jù)庫的話,那么當(dāng)CREATE DATABASE語句無法用同一名稱新建數(shù)據(jù)庫時(shí),就會(huì)顯示一個(gè)出錯(cuò)信息。這時(shí),psql程序?qū)默F(xiàn)有的數(shù)據(jù)庫中的備份文件來重新創(chuàng)建各數(shù)據(jù)庫對象。這很可能導(dǎo)致生成的數(shù)據(jù)庫中包含不希望有的數(shù)據(jù)庫對象,并且數(shù)據(jù)庫設(shè)置也不正確。
第四步::使用cd命令將當(dāng)前工作目錄切換至Postgres Plus所在的bin目錄。
cd/opt/PostgresPlus/8.4SS/bin
注意:如果您使用的是Postgres Plus Advanced Server的話,請將當(dāng)前工作目錄通過cd命令切換至dbserver/bin。
第五步:運(yùn)行psql程序,并給出要連接(使用-d選項(xiàng))的數(shù)據(jù)庫的名稱、具有超級用戶特權(quán)的角色(使用-U選項(xiàng))和備份文件的目錄路徑(使用-f選項(xiàng))。
注意:用-d選項(xiàng)規(guī)定的數(shù)據(jù)庫對恢復(fù)操作沒有影響。psql程序需要先通過數(shù)據(jù)庫連接建立一個(gè)會(huì)話,然后才能處理備份文件中的SQL語句和psql命令。
./psql-d postgres-U postgres-f/home/user/sample_backup
這樣就會(huì)從備份文件sample_backup中重新創(chuàng)建數(shù)據(jù)庫sample。下面給出psql程序處理備份文件中的SQL語句和psql命令時(shí)所顯示的部分消息:
$ ./psql-d postgres-U postgres-f/home/user/sample_backup
Passwordforuserpostgres:SETSETSETSETSETSETCREATEDATABASEALTERDATABASEpsql (8.4.1)
You are now connectedtodatabase"sample".
總結(jié)
以上是生活随笔為你收集整理的linux postgres恢复数据库,从纯文本格式的备份文件恢复数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python使用Tkinter显示网络图
- 下一篇: mpg格式用什么播放器打开