PostgreSQL相關知識概念

2021-09-11 16:39:59 字數 3416 閱讀 7070

本文主要介紹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修煉之道 從小工到專家...