posted on
2012-05-21 10:12
stephen_liu 閱讀(
0) 編輯收藏
一、概述:
資料庫可以被看成是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 frompg_database;
注:psql應用程式的\l元命令和-l命令列選項也可以用來列出當前伺服器中已有的資料庫。
二、建立資料庫:
在postgresql伺服器上執行下面的sql語句可以建立資料庫。
create databasedb_name;
在資料庫成功建立之後,當前登入角色將自動成為此新資料庫的所有者。在刪除該資料庫時,也需要該使用者的特權。如果你想讓當前建立的資料庫的所有者為其它角色,可以執行下面的sql語句。
create databasedb_nameownerrole_name;
三、修改資料庫配置:
postgresql伺服器提供了大量的執行時配置變數,我們可以根據自己的實際情況為某一資料庫的某一配置變數指定特殊值,通過執行下面的sql命令可以使該資料庫的某一配置被設定為指定值,而不再使用預設值。
alter databasedb_namesetvarnametonew_value;
這樣在之後基於該資料庫的會話中,被修改的配置值已經生效。如果要撤消這樣的設定並恢復為原有的預設值,可以執行下面的sql命令。
alter databasedbnameresetvarname;
四、刪除資料庫:
只有資料庫的所有者和超級使用者可以刪除資料庫。刪除資料庫將會刪除資料庫中包括的所有物件,該操作是不可恢復的。見如下刪除sql命令:
drop databasedb_name;
五、表空間:
在postgresql中,表空間表示一組檔案存放的目錄位置。在建立之後,就可以在該錶空間上建立資料庫物件。通過使用表空間,管理員可以控制乙個postgresql伺服器的磁碟布局。這樣管理員就可以根據資料庫物件的資料量和資料使用頻度等參照來規劃這些物件的儲存位置,以便減少io等待,從而優化系統的整體執行效能。比如,將乙個使用頻繁的索引放在非常可靠、高效的磁碟裝置上,如固態硬碟。而將很少使用的資料庫物件存放在相對較慢的磁碟系統上。下面的sql命令用於建立表空間。
create tablespacefastspacelocation'/mnt/sda1/postgresql/data';
需要說明的是,表空間指定的位置必須是乙個現有的空目錄,且屬於postgresql系統使用者,如postgres。在成功建立之後,所有在該錶空間上建立的物件都將被存放在這個目錄下的檔案裡。
在postgresql中只有超級使用者可以建立表空間,但是在成功建立之後,就可以允許普通資料庫使用者在其上建立資料庫物件了。要完成此操作,必須在表空間上給這些使用者授予create許可權。表、索引和整個資料庫都可以放在特定的表空間裡。見如下sql命令:
create tablefoo(i int)tablespacespace1;
此外,我們還可以通過修改default_tablespace配置變數,以使指定的表空間成為預設表空間,這樣在建立任何資料庫物件時,如果沒有顯示指定表空間,那麼該物件將被建立在預設表空間中,如:
set default_tablespace = space1;
create table foo(i int);
與資料庫相關聯的表空間用於儲存該資料庫的系統表,以及任何使用該資料庫的伺服器程序建立的臨時檔案。
要刪除乙個空的表空間,可以直接使用drop tablespace命令,然而要刪除乙個包含資料庫物件的表空間,則需要先將該錶空間上的所有物件全部刪除後,才可以再在刪除該錶空間。
要檢索當前系統中有哪些表空間,可以執行以下查詢,其中pg_tablespace為postgresql中的系統表。
select spcname frompg_tablespace;
我們還可以通過psql程式的\db元命令列出現有的表空間。
SQLite學習手冊 資料型別
一 儲存種類和資料型別 sqlite將資料值的儲存劃分為以下幾種儲存型別 null 表示該值為null值。integer 無符號整型值。real 浮點值。text 文字字串,儲存使用的編碼方式為utf 8 utf 16be utf 16le。blob 儲存blob資料,該型別資料和輸入資料完全相同。...
SQLite學習手冊 資料型別
一 儲存種類和資料型別 sqlite將資料值的儲存劃分為以下幾種儲存型別 null 表示該值為null值。integer 無符號整型值。real 浮點值。text 文字字串,儲存使用的編碼方式為utf 8 utf 16be utf 16le。blob 儲存blob資料,該型別資料和輸入資料完全相同。...
SQLite學習手冊 資料型別
一 儲存種類和資料型別 sqlite將資料值的儲存劃分為以下幾種儲存型別 null 表示該值為null值。integer 無符號整型值。real 浮點值。text 文字字串,儲存使用的編碼方式為utf 8 utf 16be utf 16le。blob 儲存blob資料,該型別資料和輸入資料完全相同。...