posts - 72, comments - 66, trackbacks - 0, articles - 0

          PostgreSQL安裝和簡(jiǎn)單使用(OS:ubuntu8)

          Posted on 2008-07-04 09:12 Fingki.li 閱讀(1047) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): About linux
          1 安裝:
          軟件其實(shí)很簡(jiǎn)單,用新立得軟件包管理器搜索psql便能查到postgresql-client-8.2(同時(shí)可以搜到8.1版本,哪一個(gè)都可以),選中-應(yīng)用即可。或者在終端下輸入
          xiaop@localhost$ sudo apt-get install postgresql-8.2
          在Ubuntu系統(tǒng)中,服務(wù)器啟動(dòng)腳本放在 /etc/init.d目錄中,您可以用下面的方法來(lái)啟動(dòng),對(duì)于Fedora和Gentoo 也是類(lèi)似的;
          2
          啟動(dòng)PostgreSQL 數(shù)據(jù)庫(kù)服務(wù)器
          xiaop@localhost~# /etc/init.d/postgresql-8.2 start 注:?jiǎn)?dòng);
          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 注:查看狀態(tài);

          3.創(chuàng)建用戶


          添加用戶命令格式。

          createuser 是 SQL 命令 CREATE USER的封裝。
          命令:createuser [-a] [-A] [-d] [-D] [-e] [-P] [-h 主機(jī)名] [-p port] 用戶名


          參數(shù)說(shuō)明:

          [-a]:允許創(chuàng)建其他用戶,相當(dāng)于創(chuàng)建一個(gè)超級(jí)用戶;
          [-A]:不允許此用戶創(chuàng)建其他用戶;
          [-d]:允許此用戶創(chuàng)建數(shù)據(jù)庫(kù);
          [-D]:不允許此用戶創(chuàng)建數(shù)據(jù)庫(kù);
          [-e]:將執(zhí)行過(guò)程顯示到Shell上;
          [-P]:創(chuàng)建用戶時(shí),同時(shí)設(shè)置密碼;
          [-h 主機(jī)名]:為某個(gè)主機(jī)上的Postgres創(chuàng)建用戶;
          [-p port]:與-h參數(shù)一同使用,指定主機(jī)的端口。


          3.1添加用戶;


          3.1.1不帶參數(shù)的創(chuàng)建用戶;

          xiaop@localhost~$ createuser testuser
          Shall the new user be allowed to create databases? (y/n) n --------是否可以創(chuàng)建數(shù)據(jù)庫(kù):否
          Shall the new user be allowed to create more new users? (y/n) n ---------是否可以創(chuàng)建新用戶:否
          CREATE USER

          注:不帶參數(shù)創(chuàng)建用戶時(shí),Postgres會(huì)詢問(wèn)此用戶的權(quán)限,上面的例子創(chuàng)建了一個(gè)普通用戶;


          3.1.2 為指定的主機(jī)和端口上創(chuàng)建用戶 ;

          xiaop@localhost~$ createuser -h 172.28.18.51 -p 5000 -D -A -e testuser
          CREATE USER joe NOCREATEDB NOCREATEUSER;
          CREATE USER

          注:這個(gè)命令為主機(jī)172.28.18.51的5000端口創(chuàng)建用戶testuser, 此用戶不可以創(chuàng)建數(shù)據(jù)庫(kù)和其他用戶。


          3.1.3創(chuàng)建超級(jí)用戶;

          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

          注:這個(gè)命令在本地創(chuàng)建一個(gè)超級(jí)用戶(-a),可以創(chuàng)建數(shù)據(jù)庫(kù)(-d), 同時(shí)要求設(shè)置密碼。


          3.2 刪除用戶:

          命令:dropuser [-i] [-h] [-p] [-e] 用戶名

          參數(shù)說(shuō)明:
          [ -i]:刪除用戶前,要求確認(rèn);
          [-h 主機(jī)名]:刪除某個(gè)主機(jī)上的Postgres用戶;
          [-p port]:與-h參數(shù)一同使用,指定主機(jī)的端口;
          [-e]:將執(zhí)行過(guò)程顯示到Shell上。


          3.2.1 刪除本地的Postgres用戶;

          test@localhost~$ dropuser testuser
          DROP USER


          3.2.2 刪除遠(yuǎn)程Postgres服務(wù)器上的用戶;

          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

          注:此命令刪除主機(jī)172.28.18.51(-h)的5000端口(-p)的用戶testuser,并且需要確認(rèn)(-i);


          4. 創(chuàng)建和刪除數(shù)據(jù)庫(kù);


          4.1創(chuàng)建數(shù)據(jù)庫(kù)

          看看您能否訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)器的第一個(gè)例子就是試著創(chuàng)建一個(gè)數(shù)據(jù)庫(kù);
          要?jiǎng)?chuàng)建一個(gè)新的數(shù)據(jù)庫(kù),在我們這個(gè)例子里叫 mydb,您可以使用下面的命令:

          test@localhost~$ createdb mydb

          它應(yīng)該生成下面這樣的響應(yīng):

          CREATE DATABASE

          如果這樣,那么這一步就成功了,如果您看到類(lèi)似下面這樣的信息

          createdb: command not found

          那么就是PostgreSQL沒(méi)有安裝好,要么是就根本沒(méi)裝上;
          您還可以用其它名字創(chuàng)建數(shù)據(jù)庫(kù)。 PostgreSQL 允許您在一個(gè)節(jié)點(diǎn)上創(chuàng)建任意數(shù)量的數(shù)據(jù)庫(kù)。 數(shù)據(jù)庫(kù)名必須是以字母開(kāi)頭并且小于 63 個(gè)字符長(zhǎng)。 一個(gè)方便的做法是創(chuàng)建和您當(dāng)前用戶名同名的數(shù)據(jù)庫(kù)。 許多工具假設(shè)該數(shù)據(jù)庫(kù)名為缺省數(shù)據(jù)庫(kù)名,所以這樣可以節(jié)省您的敲鍵。要?jiǎng)?chuàng)建這樣的數(shù)據(jù)庫(kù),只需要鍵入 :

          test@localhost~$ createdb


          4.2 刪除數(shù)據(jù)庫(kù)

          如果您再也不想使用您的數(shù)據(jù)庫(kù)了,那么您可以刪除它。 比如,如果您是數(shù)據(jù)庫(kù) mydb 的所有人(創(chuàng)建人), 那么您就可以用下面的命令刪除它:
          test@localhost~$ dropdb mydb

          注:(對(duì)于這條命令而言,數(shù)據(jù)庫(kù)名不是缺省的用戶名。這樣您就必須聲明它。) 這個(gè)動(dòng)作物理上將所有與該數(shù)據(jù)庫(kù)相關(guān)的文件都刪除并且不可取消, 因此做這件事之前一定要想清楚;


          5.訪問(wèn)數(shù)據(jù)庫(kù)

          一旦您創(chuàng)建了數(shù)據(jù)庫(kù),您就可以訪問(wèn)它,您可以運(yùn)行PostgreSQL交互的終端程序,叫psql,它允許您交互地輸入,編輯,和執(zhí)行 SQL 命令。(圖形化登錄請(qǐng)參見(jiàn)6. Postgresql圖形化管理工具pgAdmin3)


          5.1 激活數(shù)據(jù)庫(kù)

          您需要啟動(dòng)psql,試驗(yàn)剛才的例子。您可以用下面的命令為 mydb 數(shù)據(jù)庫(kù)激活它:

          test@localhost~$ psql mydb

          如果您省略了數(shù)據(jù)庫(kù)名字,那么它缺省就是您的用戶賬號(hào)名字。

          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=#,這個(gè)提示符意味著您是數(shù)據(jù)庫(kù)超級(jí)用戶。


          5.2 幫助和退出數(shù)據(jù)庫(kù)

          psql 程序有一些不屬于 SQL 命令的內(nèi)部命令。 它們以反斜杠開(kāi)頭,""。 有些這種命令在歡迎信息中列出。比如,您可以用下面的命令獲取各種PostgreSQL SQL 命令的幫助語(yǔ)法:
          mydb=> \h

          要退出 psql,鍵入
          mydb=> \q

          然后 psql 就會(huì)退出并且給您返回到命令行 shell; (要獲取更多有關(guān)內(nèi)部命令的信息,您可以在 psql 提示符上鍵入 \?。)

          6. Postgresql圖形化管理工具pgAdmin3 ;

          版本:Version1.4.3


          6.1 安裝;


          6.1.1 Ubuntu安裝 ;

          有兩種方法:

          1.在新立得軟件包管理器中搜索pgadmin3,找到pgadmin3--應(yīng)用

          2.終端下輸入命令:
          test@localhost:~$ sudo apt-get install pgadmin3


          6.1.2 其它系統(tǒng)的安裝;

          您可以參考其它系統(tǒng)正常的軟件的安裝方法,起本類(lèi)似,這里就不多做介紹了;


          6.2 pgAdmin3的簡(jiǎn)單使用;

          圖形化管理系統(tǒng)相對(duì)比較直觀,您可以在命令行下操作,然后在pgAdmin3下查看效果;


          6.2.1 pgAdmin3的啟動(dòng)

          您可以在應(yīng)用程序---系統(tǒng)工具中找到pgAdmin3的啟動(dòng)項(xiàng);
          也可以在命令行下輸入:
          test@localhost:~$ /usr/bin/pgadmin3 start


          6.2.2 連接已創(chuàng)建的數(shù)據(jù)庫(kù)mydb ;

          點(diǎn)擊檔案-----新增服務(wù)器,然后在跳出的窗口下輸入:
          地址:localhost
          描述:服務(wù)器名稱(隨意填寫(xiě))
          維護(hù)數(shù)據(jù)庫(kù):postgres
          用戶名:自己創(chuàng)建一個(gè)(詳情參見(jiàn)創(chuàng)建用戶)
          密碼:和用戶名對(duì)應(yīng)(創(chuàng)建用戶時(shí)自己創(chuàng)建)

          點(diǎn)擊確定后大家便可以查看postsql已有的數(shù)據(jù)庫(kù)了;
          注:pgAdmin3的數(shù)據(jù)庫(kù)和終端下創(chuàng)建的數(shù)據(jù)庫(kù)是完全同步的(可以用刷新查看效果), pgAdmin3是比較方便的圖形化管理工具,它可以創(chuàng)建圖表,管理數(shù)據(jù)庫(kù)等,有關(guān)pgAdmin3的詳細(xì)介紹我們?cè)谝院笥懻摚疚闹饕榻B命令行下的操 作。圖形化管理工具能做到的命令行都可以做到,您可以在命令行下創(chuàng)建表,在pgAdmin3上查看是否同步:

          7. 創(chuàng)建和刪除表;


          7.1 創(chuàng)建新表;

          創(chuàng)建完數(shù)據(jù)庫(kù)之后,您就可以創(chuàng)建新表了,可以通過(guò)聲明表的名字和所有字段的名字及其類(lèi)型來(lái)創(chuàng)建表,例如:
          mydb#CREATE TABLE weather (
                          city varchar(80),
                          temp_lo int, -- 最低氣溫
                          temp_hi int, -- 最高氣溫
                          prcp real, -- 降水量
                          date date
                               );

          注:您可以在 psql 里連換行符一起鍵入這些東西。 psql 可以識(shí)別該命令直到分號(hào)才結(jié)束,不要忘記“;”
          您可以在 SQL 命令中自由使用空白(也就是空格,tab,和換行符)。 這就意味著您可以用和上面不同的對(duì)齊方式鍵入命令。 兩個(gè)劃線("--") 引入注釋。 任何跟在它后面的東西直到該行的結(jié)尾都被忽略。 SQL 是對(duì)關(guān)鍵字和標(biāo)識(shí)符大小寫(xiě)不敏感的語(yǔ)言,只有在標(biāo)識(shí)符用雙引號(hào)包圍時(shí)才能保留它們的大小寫(xiě)屬性。


          7.2 數(shù)據(jù)類(lèi)型;

          上面例子中的varchar(80) 聲明一個(gè)可以存儲(chǔ)最長(zhǎng) 80 個(gè)字符的任意字符串的數(shù)據(jù)類(lèi)型。 int 是普通的整數(shù)類(lèi)型。 real 是一種用于存儲(chǔ)單精度浮點(diǎn)數(shù)的類(lèi)型。 date 類(lèi)型應(yīng)該可以自解釋。
          PostgresSQL 支持標(biāo)準(zhǔn)的 SQL 類(lèi)型 int,smallint, real,double precision, char(N), varchar(N),date, time,timestamp 和 interval,還支持其他的通用類(lèi)型和豐富的幾何類(lèi)型。 PostgreSQL 可以客戶化為定制任意的用戶定義的數(shù)據(jù)類(lèi)型,您可以參考PostgreSQL的中文文檔來(lái)查詢;


          7.3 刪除表;

          如果您不再需要某個(gè)表,或者您想創(chuàng)建一個(gè)不同的表,那么您可以用下面的命令刪除它:
          mydb#DROP TABLE tablename


          8. 向表中添加行;


          8.1 INSERT;

          INSERT 用于向表中添加行,您可以輸入(在數(shù)據(jù)庫(kù)中操作):
          mydb#INSERT INTO weather VALUES ('San Francisco', 46, 50, 0.25, '1994-11-27');

          注:所有數(shù)據(jù)類(lèi)型都使用了相當(dāng)明了的輸入格式。 那些不是簡(jiǎn)單數(shù)字值的常量必需用單引號(hào)(')包圍, 就象在例子里一樣。


          8.2 point類(lèi)型輸入;

          point 類(lèi)型要求一個(gè)座標(biāo)對(duì)作為輸入,如下:
          mydb#INSERT INTO cities VALUES ('San Francisco', '(-194.0, 53.0)');


          8.3 COPY;

          您還可以使用 COPY 從文本文件中裝載大量數(shù)據(jù)。 這么干通常更快,因?yàn)?COPY 命令就是為這類(lèi)應(yīng)用優(yōu)化的, 只是比 INSERT 少一些靈活性.比如:
          mydb#COPY weather FROM '/home/user/weather.txt';

          注:weather.txt是您提前寫(xiě)好的符合格式標(biāo)準(zhǔn)的表格內(nèi)容文檔;


          9. 查詢一個(gè)表;


          9.1 SELECT;

          要從一個(gè)表中檢索數(shù)據(jù)就是查詢這個(gè)表。 SQL 的 SELECT 就是做這個(gè)用途的。 該語(yǔ)句分為選擇列表(列出要返回的字段部分),表列表(列出從中檢索數(shù)據(jù)的表的部分), 以及可選的條件(聲明任意限制的部分)。比如,要檢索表 weather 的所有行,鍵入:
          SELECT * FROM weather;
          <code>
          輸出結(jié)果:
          <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)

          您可以在選擇列表中寫(xiě)任意表達(dá)式,而不僅僅是字段列表。比如,您可以:
          SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

          這樣應(yīng)該得出:
               city | temp_avg | date
          ---------------+----------+------------
          San Francisco | 48 | 1994-11-27
          San Francisco | 50 | 1994-11-29
          Hayward | 45 | 1994-11-29
          (3 rows)

          請(qǐng)注意這里的 AS 子句是如何給輸出字段重新命名的。(AS 子句是可選的。)


          9.2 WHERE;

          一個(gè)查詢可以使用 WHERE 子句"修飾",聲明需要哪些行。 WHERE 子句包含一個(gè)布爾(真值)表達(dá)式,只有那些布爾表達(dá)式為真的行才會(huì)被返回。 允許您在條件中使用常用的布爾操作符(AND,OR, 和 NOT)。 比如,下面的查詢檢索舊金山的下雨天的天氣:
          mydb#SELECT * FROM weather
              WHERE city = 'San Francisco' AND prcp > 0.0;

          結(jié)果:
               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;

          得出結(jié)果:
               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

          在這個(gè)例子里,排序的順序并非絕對(duì)清晰的,因此您可能看到 San Francisco 行隨機(jī)的排序。 但是如果您使用下面的語(yǔ)句,那么就總是會(huì)得到上面的結(jié)果
          SELECT * FROM weather
              ORDER BY city, temp_lo;

          您可以要求查詢的結(jié)果按照某種順序排序, 并且消除重復(fù)的行輸出:
          mydb#SELECT DISTINCT city
              FROM weather;

          得出結(jié)果:
               city
          ---------------
          Hayward
          San Francisco
          (2 rows)

          再次聲明,結(jié)果行的順序可能是隨機(jī)的。


          10. 視圖;

          假設(shè)您的應(yīng)用對(duì)天氣記錄和城市位置的組合列表特別感興趣, 而您又不想每次鍵入這些查詢。那么您可以在這個(gè)查詢上創(chuàng)建一個(gè)視圖, 它給這個(gè)查詢一個(gè)名字,您可以像普通表那樣引用它。

          進(jìn)入數(shù)據(jù)庫(kù)后輸入:
          mydb#CREATE VIEW myview AS
              SELECT city, temp_lo, temp_hi, prcp, date, location
                  FROM weather, cities
                  WHERE city = name;

          建立視圖;

          然后選擇建好的視圖:
          SELECT * FROM myview;

          結(jié)果如下:
               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 命令更新現(xiàn)有的行。 假設(shè)您發(fā)現(xiàn)所有 11 月 28 日的溫度計(jì)數(shù)都低了兩度,那么您就可以用下面的方式更新數(shù)據(jù):
          mydb#UPDATE weather
              SET temp_hi = temp_hi - 2, temp_lo = temp_lo - 2
              WHERE date > '1994-11-28';

          看看數(shù)據(jù)的新?tīng)顟B(tài):
          SELECT * FROM weather;

          結(jié)果為:
               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. 刪除行;

          數(shù)據(jù)行可以用 DELETE 命令從表中刪除。假設(shè)您對(duì)Hayward的天氣不再感興趣,那么您可以用下面的方法把那些行從表中刪除:
          mydb#DELETE FROM weather WHERE city = 'Hayward';

          我們用下面形式的語(yǔ)句的時(shí)候一定要小心
          DELETE FROM tablename;

          如果沒(méi)有條件,DELETE 將從指定表中刪除所有行,把它清空。做這些之前系統(tǒng)不會(huì)請(qǐng)求您確認(rèn)!


          部分參考自:http://www.chinalinuxpub.com/read.php?wid=1552

          主站蜘蛛池模板: 页游| 垣曲县| 东丽区| 肥东县| 万州区| 鹤山市| 汶川县| 调兵山市| 墨玉县| 仙游县| 延川县| 宜兰市| 长子县| 京山县| 洛宁县| 嘉禾县| 怀宁县| 广西| 汶川县| 瑞金市| 探索| 轮台县| 安阳市| 裕民县| 清远市| 凌源市| 华蓥市| 综艺| 台前县| 申扎县| 南和县| 舒城县| 定西市| 栖霞市| 岗巴县| 红桥区| 陵水| 离岛区| 巩留县| 同心县| 新宾|