本文主要介紹postgresql資料庫的一些重要知識點,
包括資料庫、模式、表空間、使用者/角色等概念和關係,
幫助使用者理解postgresql資料庫的重要概念,
從而能夠更好的使用postgresql。
通常role(角色)和user(使用者)是兩個不同的概念,
但是在postgresql裡沒有區分使用者和角色,
這裡容易和其他資料庫的概念混淆,
在postgresql兩者區別僅在於使用者比角色多了登陸許可權。
下面分別是建立role和user的sql:
create role kanon1 password 'kanon1';
create user kanon2 password 'kanon2';
建立完成後role kanon1不能登陸,
但是user kanon2能夠登陸。
為role kanon1增加login許可權:
alter role kanon1 login;
然後kanon1也能夠登陸了。
create user除了預設具有login許可權之外,
其他與create role是完全相同的。
下面兩條sql語句是等價的:
create role kanon password 'kanon' login;
create user kanon password 'kanon';
角色(使用者)可以擁有全域性資料庫物件,
可以擁有資料庫伺服器全域性範圍內的許可權,
用於對資料庫所有的物件進行管理。
角色不特定於某個單獨的資料庫,
如果需要管理資料庫系統則必須連線到乙個資料庫上。
schema(模式)是對database(資料庫)邏輯分割,
schema可以理解為命名空間,
schema就是資料庫物件的集合。
乙個database至少有乙個schema,
在建立database時,
自動建立乙個預設schema public。
這個database建立的所有物件(表、函式、檢視、索引、序列等),
如果沒有指定schema,
預設都是屬於public。
使用者登入到postgresql,連線到乙個資料庫後,
由於乙個database可以有多個schema,
需要通過database的search_path來確定schema的搜尋順序,
可以通過命令show檢視具體的順序,
也可以通過命令set來設定順序。
檢視當前資料庫搜尋路徑:
show search_path;
設定新的搜尋路徑:
set search_path to myschema,public;
官方建議:
在管理員建立乙個database後,
應該為所有可以連線到該database的使用者,
分別建立乙個與使用者名稱相同的schema,
然後將search_path設定為"$user",
這樣當某個使用者連線上來後,
預設使用的是與之同名的schema,
這是乙個好的設計架構。
資料庫中乙個物件的完整名稱為schema.object,
而不是user.object。
如果在操作物件時不指定schema,
則使用登陸使用者的預設schema。
比如查詢乙個表時,
沒有指明該錶所屬的schema,
系統自動在表上加上預設的schema名。
查詢freeoa使用者的emp表:
select * from emp;
假設freeoa使用者預設的schema為freeoa,
則實際上sql語句的完整寫法:
select * from freeoa.emp;
建立schema kanon,屬主為kanon:
create schema kanon owner kanon;
建立表test,指定屬於schema kanon:
create table kanon.test (id integer not null);
同乙個物件名可以在不同的schema裡使用而不會導致衝突,
比如schema1和schema2都可以包含叫做test的表,
和database不同,schema不是嚴格分離的,
乙個使用者只要有許可權,
可以訪問乙個database中的任意schema。
使用者可以允許別人在自己的schema裡建立物件,
需要賦予其他使用者在該schema的create許可權。
預設每個人都在schema public上有create許可權,
所以連線到資料庫上的使用者都可以在public建立物件。
這個許可權可以撤銷:
revoke create on public from public;
第乙個public是schema,
第二個public是指所有使用者。
在postgresql中,表空間是乙個目錄,
表空間是實際的資料儲存的地方,
儲存的是它所包含的資料庫的各種物理檔案。
乙個資料庫schema可能存在於多個表空間,
乙個表空間也可以為多個schema服務。
建立資料庫使用create database dbname,
預設的資料庫所有者是當前建立資料庫的使用者,
預設的表空間是系統的預設表空間pg_default。
在postgresql中,資料庫的建立是通過轉殖資料庫模板來實現的。
由於create database dbname並沒有指明資料庫模板,
所以預設使用template1資料庫當作轉殖模板,
template1中的全部物件將被同步轉殖到新的資料庫中。
由於template1資料庫的預設表空間是pg_default,
所以新的資料庫也使用預設表空間是pg_default,
pg_default這個表空間是在資料庫初始化時建立的。
建立資料庫時指定資料庫模板和表空間:
create database dbname owner kanon template template1 tablespace tablespacename;
表空間的作用:
通過使用表空間,管理員可以控制磁碟的布局。
表空間的最常用的作用是優化效能,
比如乙個最常用的索引可以建立在非常快的硬碟上,
而不太常用的表可以建立在便宜的硬碟上,
比如用來儲存用於進行歸檔檔案的表。
其他 postgreSQL相關
還在mysql和postgresql徘徊的同學可以看一下 我主要是被它 1.支援複雜的sql查詢 2.程序機制,比執行緒對多核cpu利用率更高 上面是這樣寫的,沒做個測試 3.bsd開源,以及其他的多個優點 postgresql ubuntu 搭建 有幾個資料庫的概念普及一下 關係型資料庫 sql ...
Postgresql相關問題
系統環境ubuntu 16.04 sudo apt get install postgresql client dpkg l postgresql client 確認安裝到本機 sudo apt get install postgresql apt cache show postgresql 會列出...
PostgreSQL相關入門資料
postgresql相關入門資料 這個中文手冊是翻譯中的版本,因此混合了9.4和9.5的內容 如果以開發應用為主要目的,可以重點看下 i.教程 和 ii.sql 語言 postgresql 9 administration cookbook 第2版 中文版 postgresql修煉之道 從小工到專家...