Postgres 数据库安装、配置、备份还原及存储过程
一、前提
1、CenTos操作系統(tǒng),安裝系統(tǒng)時選擇安裝Postgres數(shù)據(jù)庫。
二、安裝數(shù)據(jù)庫及配置
1、初始化數(shù)據(jù)庫TestDB
? ?? ?由于安裝系統(tǒng)時選擇安裝了Postgres數(shù)據(jù)庫,因此系統(tǒng)自帶postgres用戶名,該用戶名是針對Postgres數(shù)據(jù)庫的管理員。
(1)使用系統(tǒng)自帶的數(shù)據(jù)庫用戶名稱postgres,在root權(quán)限下執(zhí)行。
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data
su postgres
initdb –D /usr/local/pgsql/data
? ?? ?? ?? ?? ? postmaster –D /usr/local/pgsql/data/ &
(2)手動創(chuàng)建數(shù)據(jù)庫用戶名稱,比如postgresql ,在root權(quán)限下執(zhí)行。
adduser postgresql
mkdir /usr/local/pgsql/data
chown postgresql /usr/local/pgsql/data
su postgresql
initdb –D /usr/local/pgsql/data
? ?? ?? ?? ?? ?postmaster –D /usr/local/pgsql/data/ &
2、配置數(shù)據(jù)庫文件
(1)root權(quán)限下進如pgsql下的data目錄,修改pg_hba.conf,在其后追加內(nèi)容如下,其中IP為數(shù)據(jù)庫服務(wù)器的IP地址。
? ?? ?? ???host??all??all??192.168.0.1/24? ?md5
(2)修改同一目錄下的postgresql.conf文件,去掉文件listen_address和port前的#號,然后修改
? ?? ?? ???listen_address = '*'
(3)使用postgres或postgresql管理員添加用戶postuser及對應(yīng)密碼。
經(jīng)過這樣配置,就可以使用postuser及密碼遠(yuǎn)程連接服務(wù)器了。
3、初始化數(shù)據(jù)庫TestDB
(1)切換到postgres用戶下,創(chuàng)建數(shù)據(jù)庫
? ?? ?? ? createdb TestDB;
(2)進入數(shù)據(jù)庫
? ?? ?? ? psql TestDB
4、備份及還原數(shù)據(jù)庫
(1)切換到數(shù)據(jù)庫用戶postgres下,執(zhí)行下面命令:
備份:Pg_dump –h localhost –U postgres –n public –Ft TestDB > /home/postgres/[名稱].tar
還原:
切換到數(shù)據(jù)庫用戶postgresql下,先刪除原數(shù)據(jù)庫"TestDB"(如果存在),再以"TestDB"的名稱重新建立數(shù)據(jù)庫,執(zhí)行下面命令
psql TestDB
create language plpgSQL;
\q
pg_restore –h localhost –U postgres –d TestDB [路徑]/ [名稱].tar
vacuumdb -a –z
5、添加用戶postuser
? ?? ???createuser postuser -P
6、開機自啟動數(shù)據(jù)庫
<!--[if !supportLists]-->(1)? ? 用root用戶登錄服務(wù)器,然后切換到/etc/rc.d/目錄下。<!--[endif]-->
<!--[if !supportLists]-->(2)? ? 使用vi命令打開rc.local文件,在其后追加命令如下:<!--[endif]-->
su - postgresql -c "postmaster -D /usr/local/pgsql/data/&"
7、存儲過程
(1)存儲過程以plpgsql語言書寫,因此在書寫存儲過程前,先把plpgsql語言安裝進數(shù)據(jù)庫TestDB中。
? ?? ???psql TestDB
? ?? ?? ?? ?? ???create language plpgSQL;
(2)創(chuàng)建表舉例
Create TABLE "CallRecordTable"
(
"CallIndex" INTEGER PRIMARY KEY,
"CallerNumber" VARCHAR(32) NOT NULL DEFAULT 'anonymous',
"CalleeNumber" VARCHAR(32) NOT NULL DEFAULT 'anonymous',
"StartTime" VARCHAR(16) NOT NULL,
"StopTime" VARCHAR(16) NOT NULL,
"StoreFlag" SMALLINT NOT NULL CONSTRAINT Record_Flag_Value CHECK("StoreFlag" >= 1 AND "StoreFlag" <= 10) DEFAULT 1,
"ReGenrationID" VARCHAR(32) NOT NULL REFERENCES "RegenServiceInfoTable" ("ReGenrationID") ON Delete CASCADE ON Update CASCADE,
CONSTRAINT Caller_Start_OnlyOne UNIQUE("CallerNumber","StartTime"),
CONSTRAINT Callee_Start_OnlyOne UNIQUE("CalleeNumber","StartTime"),
CHECK("StartTime" <= "StopTime")
);
(3)創(chuàng)建存儲過程舉例
Create or REPLACE FUNCTION "funSelectRecordByDateCall"(Number VARCHAR(32),StartTime VARCHAR(16),EndTime VARCHAR(16))
RETURNS refcursor AS
$$
DECLARE recordcur refcursor;
BEGIN
OPEN recordcur FOR
Select
? ? "CallIndex",
? ? "CallerNumber",
? ? "CalleeNumber",
? ? TO_TIMESTAMP("StartTime",'YYYYMMDDHH24MISS') AS "StartTime",
? ? TO_TIMESTAMP("StopTime",'YYYYMMDDHH24MISS') AS "StopTime",
? ? ( TO_TIMESTAMP("StopTime",'YYYYMMDDHH24MISS') - TO_TIMESTAMP("StartTime",'YYYYMMDDHH24MISS') ) AS "ContinuingTime",
? ? "StoreFlag",
? ? CR."ReGenrationID",
? ? "Ip",
? ? "Port"
FROM
? ? "CallRecordTable" AS CR,
? ? "RegenServiceInfoTable" AS RS
Where
? ? ( "StartTime" BETWEEN StartTime AND EndTime )
? ? AND( "CallerNumber" = Number )
? ? AND( CR."ReGenrationID" = RS."ReGenrationID" )
? ? or( "StartTime" BETWEEN StartTime AND EndTime )
? ? AND( "CalleeNumber" = Number )
? ? AND( CR."ReGenrationID" = RS."ReGenrationID" )
orDER BY "StartTime" DESC;
RETURN recordcur;
END;
$$
LANGUAGE PLpgSQL;
本文來自http://bbs.chinaunix.net/thread-1816035-1-13.html
CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/zst126/archive/2007/10/31/1859608.aspx
轉(zhuǎn)載于:https://www.cnblogs.com/dview112/archive/2012/10/22/2733964.html
總結(jié)
以上是生活随笔為你收集整理的Postgres 数据库安装、配置、备份还原及存储过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UU看书于今日成功上线,各大小说网站发来
- 下一篇: Oracle--SQL技巧之二(多行记录