Postgres 数据库安装、配置、备份还原及存储过程
一、前提
1、CenTos操作系統,安裝系統時選擇安裝Postgres數據庫。
二、安裝數據庫及配置
1、初始化數據庫TestDB
? ?? ?由于安裝系統時選擇安裝了Postgres數據庫,因此系統自帶postgres用戶名,該用戶名是針對Postgres數據庫的管理員。
(1)使用系統自帶的數據庫用戶名稱postgres,在root權限下執行。
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)手動創建數據庫用戶名稱,比如postgresql ,在root權限下執行。
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、配置數據庫文件
(1)root權限下進如pgsql下的data目錄,修改pg_hba.conf,在其后追加內容如下,其中IP為數據庫服務器的IP地址。
? ?? ?? ???host??all??all??192.168.0.1/24? ?md5
(2)修改同一目錄下的postgresql.conf文件,去掉文件listen_address和port前的#號,然后修改
? ?? ?? ???listen_address = '*'
(3)使用postgres或postgresql管理員添加用戶postuser及對應密碼。
經過這樣配置,就可以使用postuser及密碼遠程連接服務器了。
3、初始化數據庫TestDB
(1)切換到postgres用戶下,創建數據庫
? ?? ?? ? createdb TestDB;
(2)進入數據庫
? ?? ?? ? psql TestDB
4、備份及還原數據庫
(1)切換到數據庫用戶postgres下,執行下面命令:
備份:Pg_dump –h localhost –U postgres –n public –Ft TestDB > /home/postgres/[名稱].tar
還原:
切換到數據庫用戶postgresql下,先刪除原數據庫"TestDB"(如果存在),再以"TestDB"的名稱重新建立數據庫,執行下面命令
psql TestDB
create language plpgSQL;
\q
pg_restore –h localhost –U postgres –d TestDB [路徑]/ [名稱].tar
vacuumdb -a –z
5、添加用戶postuser
? ?? ???createuser postuser -P
6、開機自啟動數據庫
<!--[if !supportLists]-->(1)? ? 用root用戶登錄服務器,然后切換到/etc/rc.d/目錄下。<!--[endif]-->
<!--[if !supportLists]-->(2)? ? 使用vi命令打開rc.local文件,在其后追加命令如下:<!--[endif]-->
su - postgresql -c "postmaster -D /usr/local/pgsql/data/&"
7、存儲過程
(1)存儲過程以plpgsql語言書寫,因此在書寫存儲過程前,先把plpgsql語言安裝進數據庫TestDB中。
? ?? ???psql TestDB
? ?? ?? ?? ?? ???create language plpgSQL;
(2)創建表舉例
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)創建存儲過程舉例
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博客,轉載請標明出處:http://blog.csdn.net/zst126/archive/2007/10/31/1859608.aspx
轉載于:https://www.cnblogs.com/dview112/archive/2012/10/22/2733964.html
總結
以上是生活随笔為你收集整理的Postgres 数据库安装、配置、备份还原及存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UU看书于今日成功上线,各大小说网站发来
- 下一篇: 在sitecopy中设置不支持passi