Next Previous Contents

7. 快速開始指引

請參考 快速安裝指引一章。

7.1 資料庫建立、丟棄、改名

你可使用使用者友善的 GUI,名為‘pgaccess’來建立和丟棄資料庫,也可用指令列‘psql’工具。


如你以 root 身份登入,變身為用者‘postgres’︰
# xhost + (讓 pgaccess 使用顯示裝置)
# su - postgres
bash$ man createdb
bash$ createdb mydatabase
bash$ man psql
bash$ psql mydatabase
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

bash$ export DISPLAY=<主機名>:0.0
bash$ man pgaccess
bash$ pgaccess mydatabase

你現在可以在 psql 或 pgaccess 高速下達 SQL 指令。

要丟棄資料庫的話︰


bash$ man dropdb
bash$ man destroydb  (在較舊版本的 pgsql 中使用) 
bash$ dropdb <資料庫名稱>

也可以在一個 SQL 連接期間用以下指令消滅一個資料庫︰
> drop database <資料庫名稱>

要更改資料庫名稱,請參閱 備份和還原一節

7.2 建立和丟棄用戶

要建立新用戶,以 unix 用戶‘postres’簽入,你可用簡單易用的 GUI 工具‘pgaccess’來增減用戶。


bash$ man pgaccess
bash$ pgaccess <資料庫名稱>

擊選“Users”tab,再擊選 Object|New 或 Object|Delete

你也可用指令行命令稿 (script)。名為‘createuser’的命令稿啟動 psql。


bash$ man createuser
bash$ createuser <用戶名稱>
bash$ createuser -h host -p port -i userid <用戶名稱>

要丟棄一個 postgres 用戶,使用命令稿‘destroyuser’。


bash$ man dropuser
bash$ man destroyuser (在較舊版本的 pgsql 中使用) 
bash$ destroyuser

7.3 建立和丟棄群組

目前沒有簡單的介面可用來設定用戶群組。你要自行在 pg_group 表格中插入或更新紀錄。如︰


bash$ su - postgres
bash$ psql <資料庫名稱>
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

psql=> insert into pg_group (groname, grosysid, grolist)
psql=> values ('posthackers', '1234', '{5443, 8261}' );
INSERT 58224
psql=> grant insert on foo to group posthackers;
CHANGE
psql=>

pg_group 中的欄位為︰ groname 群組名稱。這名稱必須全為字母或數字,不可有底線或標點符號。

grosysid 群組代碼。這是一個 int4,每個群組都要獨一無二。

grolist 屬於此群組的 pg_user 代碼名單。是一個 int4[]。

要刪除群組︰


bash$ su - postgres
bash$ psql <資料庫名稱>
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s


psql=> delete from pg_group where groname = 'posthackers';

7.4 建立、編輯和丟棄表格

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來建立、編輯和丟棄資料庫表格。


bash$ man pgaccess
bash$ pgaccess <資料庫名稱>

擊選 Table | New | Design 按鈕。
bash$ man psql
bash$ psql <資料庫名稱>
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

在 psql 提示下,鍵入標準的 SQL 指令,如‘create table’、‘alter table’或‘drop table’來處理表格。

7.5 建立、編輯和丟棄表格中的紀錄

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來建立、 編輯和丟棄資料庫表格中的紀錄。


bash$ man pgaccess
bash$ pgaccess <資料庫名稱>

擊選 Table | < 選一個表格 > | Open 按鈕。
bash$ man psql
bash$ psql <資料庫名稱>
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

在 psql 提示下,鍵入標準的 SQL 指令,如‘insert into table_name’、‘update table_name’或‘delete from table_name’來處理表格。

7.6 改變目前的資料庫

你可使用使用者友善的 GUI,名為‘pgaccess’,或指令列‘psql’工具來改變目前的資料庫。


bash$ man pgaccess
bash$ pgaccess <資料庫名稱>

擊選 Database | Open 按鈕。
bash$ man psql
bash$ psql <資料庫名稱>
…在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

psql=> connect <資料庫名稱> <user>

7.7 備份與還原資料庫

PostgreSQL 提供了兩個工具來備份你的系統︰pg_dump 備份一個資料庫,pg_dumpall 一次過備份所有資料庫。


bash$ su - postgres
bash$ man pd_dump
bash$ pd_dump <資料庫名稱> > database_name.pgdump

還原則︰
bash$ cat database_name.pgdump | psql <資料庫名稱>

這技考可用於搬移資料庫或為資料庫改名。

警告︰每個資料庫都要定時備份。因為 PostgreSQL 自行管理它在檔案系統中的檔案,所以不要倚賴系統備份來作資料庫備份。 沒有人能保證那些檔案在還原後會處於一個可用而一致的狀態。

備份大型資料庫︰因為 PostreSQL 容許表格大過系統的最大檔案容量,把一個表格輸出為一個檔案會有問題, 因為所產生的檔案可能會超出系統的限制。因為 pg_dump 會寫到 stdout,你可使用標準的 unix 工具來解決這可能的問題︰

使用壓縮了的輸出︰


bash$ pg_dump <資料庫名稱> | gzip > filename.dump.gz

用以下方法重新載入︰
bash$ createdb <資料庫名稱>
bash$ gunzip -c filename.dump.gz | psql <資料庫名稱>


bash$ cat filename.dump.gz | gunzip | psql <資料庫名稱>

使用 split︰


bash$ pg_dump <資料庫名稱> | split -b 1m - filename.dump.

注意︰以上指令中,在 filename.dump 後有一點 (.)!!你可用以下方法重新載入︰
bash$ man createdb
bash$ createdb <資料庫名稱>
bash$ cat filename.dump.* | pgsql <資料庫名稱>

當然,檔案名稱(filename)和 pg_dump 輸出的內容無需和資料庫名稱配合。此外,還原了的資料庫可有任何新名。 因此這方法適用於為資料庫改名。

要把所有 PostgreSQL 輸出,使用 pg_dumpall


bash$ man pg_dumpall
bash$ pg_dumpall -o > db.out
要重新載入︰
bash$ psql -e template1 < db.out

7.8 資料庫保安

請參閱 PostgreSQL 保安一節。

7.9 線上求助

你必須知道 PostgreSQL 的線上求助設施,因為它會為你節省很多時間,讓你快速取得資料。

請參閱不同指令,如 createdb、createuser 等等的線上 man pages。


bash$ man createdb

也請參閱 psql 的線上求助訊息,在 psql 提示鍵入 \h


bash$ psql mydatabase
psql> \h
提示︰在 psql 按上 / 下箭咀來編輯歷史紀錄或用 \s

7.10 建立激發 (Triggers) 和內儲程序 (Stored Procedures)

要建立激發或內儲程序,先在你使用的資料庫執行‘createlang’命令稿來安裝 ‘plpgsql’。如果你想預設使用它,把它安裝在‘template1’, 因為以後建立的資料庫都是 template1 的仿裝品。參閱‘createlang’網頁或位於 /usr/doc/postgresql-7.0.2/user/index.html 的 User Guide。


bash$ man createlang
bash$ createdb mydb
bash$ export PGLIB=/usr/lib/pgsql
bash$ createlang plpgsql mydb
bash$ createlang plpgsql template1

也請參考 例子 RPM 中激發和內儲程序的例子。Examples RPM 中的其中一個例子︰
create function tg_pfield_au() returns opaque as '
begin
    if new.name != old.name then
        update PSlot set pfname = new.name where pfname = old.name;
    end if;
    return new;
end;
' language 'plpgsql';

create trigger tg_pfield_au after update
    on PField for each row execute procedure tg_pfield_au();

另一個激發程式碼例子︰
create trigger check_fkeys_pkey_exist
        before insert or update on fkeys
        for each row
        execute procedure
        check_primary_key ('fkey1', 'fkey2', 'pkeys', 'pkey1', 'pkey2');

你必須安裝 TEST 套件— postgresql-test-7.0.2-2.rpm 和閱讀在 /usr/lib/pgsql/test/regress/sql 中的 SQL 命令稿例子。

要顯示資料庫中激發的名單—


bash$ psql mydb
psql=> \?
psql=> \dS
psql=> \d pg_trigger
psql=> select tgname from pg_trigger order by tgname;

要顯示資料庫中函數和內儲程序的名單—


bash$ psql mydb
psql=> \?
psql=> \dS
psql=> \d pg_proc
psql=> select proname, prosrc from pg_proc order by proname;
psql=> \df

7.11 PostgreSQL 文件

有關其他問題,請參閱 PostgreSQL 的說明書,它們的資料十分全面。PostgreSQL 文件已在套件中。請閱讀‘User's Guide’、‘Programmer's Guide’、‘Administrator's Guide’和其他說明書。


Next Previous Contents