PostgreSQL學習手冊(資料庫管理)

greenteazsh發表於2013-04-26
一、概述:

    資料庫可以被看成是SQL物件(資料庫物件)的命名集合,通常而言,每個資料庫物件(表、函式等)只屬於一個資料庫。不過對於部分系統表而言,如 pg_database,是屬於整個叢集的。更準確地說,資料庫是模式的集合,而模式包含表、函式等SQL物件。因此完整的物件層次應該是這樣的:服務 器、資料庫、模式、表或其他型別的物件。
    在與資料庫伺服器建立連線時,該連線只能與一個資料庫形成關聯,不允許在一個會話中進行多個資料庫的訪問。如以postgres使用者登入,該使用者可以訪 問的預設資料庫為postgres,在登入後如果執行下面的SQL語句將會收到PostgreSQL給出的相關錯誤資訊。
    postgres=# SELECT * FROM MyTest."MyUser".testtables;
    ERROR:  cross-database references are not implemented: "otherdb.otheruser.sometable"
    LINE 1: select * from otherdb.otheruser.sometable
    在PostgreSQL中,資料庫在物理上是相互隔離的,對它們的訪問控制也是在會話層次上進行的。然而模式只是邏輯上的物件管理結構,是否能訪問某個模式的物件是由許可權系統來控制的。
    執行下面的基於系統表的查詢語句可以列出現有的資料庫集合。
    SELECT datname FROM pg_database;
    注:psql應用程式的\l元命令和-l命令列選項也可以用來列出當前伺服器中已有的資料庫。
    
二、建立資料庫:

    在PostgreSQL伺服器上執行下面的SQL語句可以建立資料庫。
    CREATE DATABASE db_name;
    在資料庫成功建立之後,當前登入角色將自動成為此新資料庫的所有者。在刪除該資料庫時,也需要該使用者的特權。如果你想讓當前建立的資料庫的所有者為其它角色,可以執行下面的SQL語句。
    CREATE DATABASE db_name OWNER role_name;

三、修改資料庫配置:

    PostgreSQL伺服器提供了大量的執行時配置變數,我們可以根據自己的實際情況為某一資料庫的某一配置變數指定特殊值,通過執行下面的SQL命令可以使該資料庫的某一配置被設定為指定值,而不再使用預設值。
    ALTER DATABASE db_name SET varname TO new_value;
    這樣在之後基於該資料庫的會話中,被修改的配置值已經生效。如果要撤消這樣的設定並恢復為原有的預設值,可以執行下面的SQL命令。
    ALTER DATABASE dbname RESET varname;

四、刪除資料庫:

    只有資料庫的所有者和超級使用者可以刪除資料庫。刪除資料庫將會刪除資料庫中包括的所有物件,該操作是不可恢復的。見如下刪除SQL命令:
    DROP DATABASE db_name;
   
五、表空間:

    在PostgreSQL中,表空間表示一組檔案存放的目錄位置。在建立之後,就可以在該表空間上建立資料庫物件。通過使用表空間,管理員可以控制一個 PostgreSQL伺服器的磁碟佈局。這樣管理員就可以根據資料庫物件的資料量和資料使用頻度等參照來規劃這些物件的儲存位置,以便減少IO等待,從而 優化系統的整體執行效能。比如,將一個使用頻繁的索引放在非常可靠、高效的磁碟裝置上,如固態硬碟。而將很少使用的資料庫物件存放在相對較慢的磁碟系統 上。下面的SQL命令用於建立表空間。
    CREATE TABLESPACE fastspace LOCATION '/mnt/sda1/postgresql/data';
    需要說明的是,表空間指定的位置必須是一個現有的空目錄,且屬於PostgreSQL系統使用者,如postgres。在成功建立之後,所有在該表空間上建立的物件都將被存放在這個目錄下的檔案裡。
    在PostgreSQL中只有超級使用者可以建立表空間,但是在成功建立之後,就可以允許普通資料庫使用者在其上建立資料庫物件了。要完成此操作,必須在表空間上給這些使用者授予CREATE許可權。表、索引和整個資料庫都可以放在特定的表空間裡。見如下SQL命令:
    CREATE TABLE foo(i int) TABLESPACE space1;
    此外,我們還可以通過修改default_tablespace配置變數,以使指定的表空間成為預設表空間,這樣在建立任何資料庫物件時,如果沒有顯示指定表空間,那麼該物件將被建立在預設表空間中,如:
    SET default_tablespace = space1;
    CREATE TABLE foo(i int);
    與資料庫相關聯的表空間用於儲存該資料庫的系統表,以及任何使用該資料庫的伺服器程式建立的臨時檔案。
    要刪除一個空的表空間,可以直接使用DROP TABLESPACE命令,然而要刪除一個包含資料庫物件的表空間,則需要先將該表空間上的所有物件全部刪除後,才可以再在刪除該表空間。
    要檢索當前系統中有哪些表空間,可以執行以下查詢,其中pg_tablespace為PostgreSQL中的系統表。
    SELECT spcname FROM pg_tablespace;
    我們還可以通過psql程式的\db元命令列出現有的表空間。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9521459/viewspace-759327/,如需轉載,請註明出處,否則將追究法律責任。

相關文章