Posted on 2008-07-04 09:12
Fingki.li 閱讀(1040)
評論(0) 編輯 收藏 所屬分類:
About linux
1 安裝:
軟件其實很簡單,用新立得軟件包管理器搜索psql便能查到postgresql-client-8.2(同時可以搜到8.1版本,哪一個都可以),選中-應用即可。或者在終端下輸入
xiaop@localhost$ sudo apt-get install postgresql-8.2在Ubuntu系統中,服務器啟動腳本放在 /etc/init.d目錄中,您可以用下面的方法來啟動,對于Fedora和Gentoo 也是類似的;
2 啟動PostgreSQL 數據庫服務器
xiaop@localhost~# /etc/init.d/postgresql-8.2 start 注:啟動;
xiaop@localhost~# /etc/init.d/postgresql-8.2 restart 注:重啟;
xiaop@localhost~# /etc/init.d/postgresql-8.2 stop 注:停止;
xiaop@localhost~# /etc/init.d/postgresql-8.2 status 注:查看狀態;
3.創建用戶
添加用戶命令格式。
createuser 是 SQL 命令 CREATE USER的封裝。
命令:createuser [-a] [-A] [-d] [-D] [-e] [-P] [-h 主機名] [-p port] 用戶名
參數說明:
[-a]:允許創建其他用戶,相當于創建一個超級用戶;
[-A]:不允許此用戶創建其他用戶;
[-d]:允許此用戶創建數據庫;
[-D]:不允許此用戶創建數據庫;
[-e]:將執行過程顯示到Shell上;
[-P]:創建用戶時,同時設置密碼;
[-h 主機名]:為某個主機上的Postgres創建用戶;
[-p port]:與-h參數一同使用,指定主機的端口。
3.1添加用戶;
3.1.1不帶參數的創建用戶;
xiaop@localhost~$ createuser testuser
Shall the new user be allowed to create databases? (y/n) n --------是否可以創建數據庫:否
Shall the new user be allowed to create more new users? (y/n) n ---------是否可以創建新用戶:否
CREATE USER
注:不帶參數創建用戶時,Postgres會詢問此用戶的權限,上面的例子創建了一個普通用戶;
3.1.2 為指定的主機和端口上創建用戶 ;
xiaop@localhost~$ createuser -h 172.28.18.51 -p 5000 -D -A -e testuser
CREATE USER joe NOCREATEDB NOCREATEUSER;
CREATE USER
注:這個命令為主機172.28.18.51的5000端口創建用戶testuser, 此用戶不可以創建數據庫和其他用戶。
3.1.3創建超級用戶;
test@localhost~$ createuser -P -d -a -e testuser
Enter password for new user: testuser
Enter it again: testuser
CREATE USER joe PASSWORD 'testuser' CREATEDB CREATEUSER;
CREATE USER
注:這個命令在本地創建一個超級用戶(-a),可以創建數據庫(-d), 同時要求設置密碼。
3.2 刪除用戶:
命令:dropuser [-i] [-h] [-p] [-e] 用戶名
參數說明:
[ -i]:刪除用戶前,要求確認;
[-h 主機名]:刪除某個主機上的Postgres用戶;
[-p port]:與-h參數一同使用,指定主機的端口;
[-e]:將執行過程顯示到Shell上。
3.2.1 刪除本地的Postgres用戶;
test@localhost~$ dropuser testuser
DROP USER
3.2.2 刪除遠程Postgres服務器上的用戶;
test@localhost~$ dropuser -p 5000 -h 172.28.18.51 -i -e testuser
User "testuser" and any owned databases will be permanently deleted.
Are you sure? (y/n) y
DROP USER "testuser"
DROP USER
注:此命令刪除主機172.28.18.51(-h)的5000端口(-p)的用戶testuser,并且需要確認(-i);
4. 創建和刪除數據庫;
4.1創建數據庫
看看您能否訪問數據庫服務器的第一個例子就是試著創建一個數據庫;
要創建一個新的數據庫,在我們這個例子里叫 mydb,您可以使用下面的命令:
test@localhost~$ createdb mydb
它應該生成下面這樣的響應:
CREATE DATABASE
如果這樣,那么這一步就成功了,如果您看到類似下面這樣的信息
createdb: command not found
那么就是PostgreSQL沒有安裝好,要么是就根本沒裝上;
您還可以用其它名字創建數據庫。 PostgreSQL 允許您在一個節點上創建任意數量的數據庫。 數據庫名必須是以字母開頭并且小于 63
個字符長。 一個方便的做法是創建和您當前用戶名同名的數據庫。
許多工具假設該數據庫名為缺省數據庫名,所以這樣可以節省您的敲鍵。要創建這樣的數據庫,只需要鍵入 :
test@localhost~$ createdb
4.2 刪除數據庫
如果您再也不想使用您的數據庫了,那么您可以刪除它。 比如,如果您是數據庫 mydb 的所有人(創建人), 那么您就可以用下面的命令刪除它:
test@localhost~$ dropdb mydb
注:(對于這條命令而言,數據庫名不是缺省的用戶名。這樣您就必須聲明它。) 這個動作物理上將所有與該數據庫相關的文件都刪除并且不可取消, 因此做這件事之前一定要想清楚;
5.訪問數據庫
一旦您創建了數據庫,您就可以訪問它,您可以運行PostgreSQL交互的終端程序,叫psql,它允許您交互地輸入,編輯,和執行 SQL 命令。(圖形化登錄請參見6. Postgresql圖形化管理工具pgAdmin3)
5.1 激活數據庫
您需要啟動psql,試驗剛才的例子。您可以用下面的命令為 mydb 數據庫激活它:
test@localhost~$ psql mydb
如果您省略了數據庫名字,那么它缺省就是您的用戶賬號名字。
Welcome to psql 8.2.4, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
mydb=#
注:最后一行 mydb=#,這個提示符意味著您是數據庫超級用戶。
5.2 幫助和退出數據庫
psql 程序有一些不屬于 SQL 命令的內部命令。 它們以反斜杠開頭,""。 有些這種命令在歡迎信息中列出。比如,您可以用下面的命令獲取各種PostgreSQL SQL 命令的幫助語法:
mydb=> \h
要退出 psql,鍵入
mydb=> \q
然后 psql 就會退出并且給您返回到命令行 shell; (要獲取更多有關內部命令的信息,您可以在 psql 提示符上鍵入 \?。)
6. Postgresql圖形化管理工具pgAdmin3 ;
版本:Version1.4.3
6.1 安裝;
6.1.1 Ubuntu安裝 ;
有兩種方法:
1.在新立得軟件包管理器中搜索pgadmin3,找到pgadmin3--應用
2.終端下輸入命令:
test@localhost:~$ sudo apt-get install pgadmin3
6.1.2 其它系統的安裝;
您可以參考其它系統正常的軟件的安裝方法,起本類似,這里就不多做介紹了;
6.2 pgAdmin3的簡單使用;
圖形化管理系統相對比較直觀,您可以在命令行下操作,然后在pgAdmin3下查看效果;
6.2.1 pgAdmin3的啟動
您可以在應用程序---系統工具中找到pgAdmin3的啟動項;
也可以在命令行下輸入:
test@localhost:~$ /usr/bin/pgadmin3 start
6.2.2 連接已創建的數據庫mydb ;
點擊檔案-----新增服務器,然后在跳出的窗口下輸入:
地址:localhost
描述:服務器名稱(隨意填寫)
維護數據庫:postgres
用戶名:自己創建一個(詳情參見創建用戶)
密碼:和用戶名對應(創建用戶時自己創建)
點擊確定后大家便可以查看postsql已有的數據庫了;
注:pgAdmin3的數據庫和終端下創建的數據庫是完全同步的(可以用刷新查看效果),
pgAdmin3是比較方便的圖形化管理工具,它可以創建圖表,管理數據庫等,有關pgAdmin3的詳細介紹我們在以后討論,本文主要介紹命令行下的操
作。圖形化管理工具能做到的命令行都可以做到,您可以在命令行下創建表,在pgAdmin3上查看是否同步:
7. 創建和刪除表;
7.1 創建新表;
創建完數據庫之后,您就可以創建新表了,可以通過聲明表的名字和所有字段的名字及其類型來創建表,例如:
mydb#CREATE TABLE weather (
city varchar(80),
temp_lo int, -- 最低氣溫
temp_hi int, -- 最高氣溫
prcp real, -- 降水量
date date
);
注:您可以在 psql 里連換行符一起鍵入這些東西。 psql 可以識別該命令直到分號才結束,不要忘記“;”
您可以在 SQL 命令中自由使用空白(也就是空格,tab,和換行符)。 這就意味著您可以用和上面不同的對齊方式鍵入命令。 兩個劃線("--")
引入注釋。 任何跟在它后面的東西直到該行的結尾都被忽略。 SQL
是對關鍵字和標識符大小寫不敏感的語言,只有在標識符用雙引號包圍時才能保留它們的大小寫屬性。
7.2 數據類型;
上面例子中的varchar(80) 聲明一個可以存儲最長 80 個字符的任意字符串的數據類型。 int 是普通的整數類型。 real 是一種用于存儲單精度浮點數的類型。 date 類型應該可以自解釋。
PostgresSQL 支持標準的 SQL 類型 int,smallint, real,double precision, char(N),
varchar(N),date, time,timestamp 和 interval,還支持其他的通用類型和豐富的幾何類型。
PostgreSQL 可以客戶化為定制任意的用戶定義的數據類型,您可以參考PostgreSQL的中文文檔來查詢;
7.3 刪除表;
如果您不再需要某個表,或者您想創建一個不同的表,那么您可以用下面的命令刪除它:
mydb#DROP TABLE tablename
8. 向表中添加行;
8.1 INSERT;
INSERT 用于向表中添加行,您可以輸入(在數據庫中操作):
mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');
注:所有數據類型都使用了相當明了的輸入格式。 那些不是簡單數字值的常量必需用單引號(')包圍, 就象在例子里一樣。
8.2 point類型輸入;
point 類型要求一個座標對作為輸入,如下:
mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');
8.3 COPY;
您還可以使用 COPY 從文本文件中裝載大量數據。 這么干通常更快,因為 COPY 命令就是為這類應用優化的, 只是比 INSERT 少一些靈活性.比如:
mydb#COPY weather FROM '/home/user/weather.txt';
注:weather.txt是您提前寫好的符合格式標準的表格內容文檔;
9. 查詢一個表;
9.1 SELECT;
要從一個表中檢索數據就是查詢這個表。 SQL 的 SELECT 就是做這個用途的。 該語句分為選擇列表(列出要返回的字段部分),表列表(列出從中檢索數據的表的部分), 以及可選的條件(聲明任意限制的部分)。比如,要檢索表 weather 的所有行,鍵入:
SELECT * FROM weather;
<code>
輸出結果:
<code>
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 43 | 57 | 0 | 1994-11-29
Hayward | 37 | 54 | | 1994-11-29
(3 rows)
您可以在選擇列表中寫任意表達式,而不僅僅是字段列表。比如,您可以:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
這樣應該得出:
city | temp_avg | date
---------------+----------+------------
San Francisco | 48 | 1994-11-27
San Francisco | 50 | 1994-11-29
Hayward | 45 | 1994-11-29
(3 rows)
請注意這里的 AS 子句是如何給輸出字段重新命名的。(AS 子句是可選的。)
9.2 WHERE;
一個查詢可以使用 WHERE 子句"修飾",聲明需要哪些行。 WHERE 子句包含一個布爾(真值)表達式,只有那些布爾表達式為真的行才會被返回。 允許您在條件中使用常用的布爾操作符(AND,OR, 和 NOT)。 比如,下面的查詢檢索舊金山的下雨天的天氣:
mydb#SELECT * FROM weather
WHERE city = 'San Francisco' AND prcp > 0.0;
結果:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
(1 row)
9.3 排序;
您可以要求返回的查詢是排好序的:
mydb#SELECT * FROM weather
ORDER BY city;
得出結果:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
Hayward | 37 | 54 | | 1994-11-29
San Francisco | 43 | 57 | 0 | 1994-11-29
San Francisco | 46 | 50 | 0.25 | 1994-11-27
在這個例子里,排序的順序并非絕對清晰的,因此您可能看到 San Francisco 行隨機的排序。 但是如果您使用下面的語句,那么就總是會得到上面的結果
SELECT * FROM weather
ORDER BY city, temp_lo;
您可以要求查詢的結果按照某種順序排序, 并且消除重復的行輸出:
mydb#SELECT DISTINCT city
FROM weather;
得出結果:
city
---------------
Hayward
San Francisco
(2 rows)
再次聲明,結果行的順序可能是隨機的。
10. 視圖;
假設您的應用對天氣記錄和城市位置的組合列表特別感興趣, 而您又不想每次鍵入這些查詢。那么您可以在這個查詢上創建一個視圖, 它給這個查詢一個名字,您可以像普通表那樣引用它。
進入數據庫后輸入:
mydb#CREATE VIEW myview AS
SELECT city, temp_lo, temp_hi, prcp, date, location
FROM weather, cities
WHERE city = name;
建立視圖;
然后選擇建好的視圖:
SELECT * FROM myview;
結果如下:
city | temp_lo | temp_hi | prcp | date | location
---------------+---------+---------+------+------------+-----------
San Francisco | 46 | 50 | 0.25 | 1994-11-27 | (-194,53)
San Francisco | 43 | 57 | 0 | 1994-11-29 | (-194,53)
(2 rows)
11. 更新行;
您可以用 UPDATE 命令更新現有的行。 假設您發現所有 11 月 28 日的溫度計數都低了兩度,那么您就可以用下面的方式更新數據:
mydb#UPDATE weather
SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
WHERE date > '1994-11-28';
看看數據的新狀態:
SELECT * FROM weather;
結果為:
city | temp_lo | temp_hi | prcp | date
---------------+---------+---------+------+------------
San Francisco | 46 | 50 | 0.25 | 1994-11-27
San Francisco | 41 | 55 | 0 | 1994-11-29
Hayward | 35 | 52 | | 1994-11-29
(3 rows)
12. 刪除行;
數據行可以用 DELETE 命令從表中刪除。假設您對Hayward的天氣不再感興趣,那么您可以用下面的方法把那些行從表中刪除:
mydb#DELETE FROM weather WHERE city = 'Hayward';
我們用下面形式的語句的時候一定要小心
DELETE FROM tablename;
如果沒有條件,DELETE 將從指定表中刪除所有行,把它清空。做這些之前系統不會請求您確認!
部分參考自:http://www.chinalinuxpub.com/read.php?wid=1552