PostgreSQL學習手冊(數據庫管理)

1、概述:

    數據庫能夠被當作是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命令行選項也能夠用來列出當前服務器中已有的數據庫。
    
2、建立數據庫:

    在PostgreSQL服務器上執行下面的SQL語句能夠建立數據庫。
     CREATE DATABASE db_name;
    在數據庫成功建立以後,當前登陸角色將自動成爲此新數據庫的全部者。在刪除該數據庫時,也須要該用戶的特權。若是你想讓當前建立的數據庫的全部者爲其它角色,能夠執行下面的SQL語句。
     CREATE DATABASE db_name OWNER role_name;

3、修改數據庫配置:

    PostgreSQL服務器提供了大量的運行時配置變量,咱們能夠根據本身的實際狀況爲某一數據庫的某一配置變量指定特殊值,經過執行下面的SQL命令可使該數據庫的某一配置被設置爲指定值,而再也不使用缺省值。
    ALTER DATABASE db_name SET varname TO new_value;
    這樣在以後基於該數據庫的會話中,被修改的配置值已經生效。若是要撤消這樣的設置並恢復爲原有的缺省值,能夠執行下面的SQL命令。
     ALTER DATABASE dbname RESET varname;

4、刪除數據庫:

    只有數據庫的全部者和超級用戶能夠刪除數據庫。刪除數據庫將會刪除數據庫中包括的全部對象,該操做是不可恢復的。見以下刪除SQL命令:
     DROP DATABASE db_name;
   
5、表空間:

    在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元命令列出現有的表空間。
相關文章
相關標籤/搜索