默認安裝后已創建 postgres 系統用戶
$ sudo -iu postgres # Or su - postgres for root
數據目錄初始化
[postgres]$ initdb --locale=zh_CN.UTF-8 -E UTF8 -D /var/lib/postgres/data
退出此用戶,啟動服務 postgresql.service
$ createuser --interactive
創建數據庫
$ createdb myDatabaseName
psql -d myDatabaseName #查看所有數據庫 \l #切換數據庫 \c <database> #列出所有用戶及權限 \du #列出當前數據庫所有表 \dt
/var/lib/postgres/data/postgresql.conf listen_addresses = 'localhost,my_local_ip_address'
查看日志
journalctl -u postgresql.service
二、概念介紹
1.模式 shceme
一個數據庫可以有至少一個或多個模式,數據庫中的內部資源(表、視圖等)存放在模式中,默認是存放在該數據庫的 public 模式中。為什么缺省對象都存放在 public 中的呢?因為在使用表(比如創建表)時,如果未指定模式名,那么系統將遍歷當前搜索路徑,直到找到一個匹配的對象。
使用
SHOW search_path;
在缺省的設置中,返回下面的東西:
search_path -------------- "$user",public
首先搜索當前用戶同名的模式,因為還沒有這樣的模式存在, 所以這條記錄被忽略。再搜索第二個,最終就會指向 public 模式。
官方建議是這樣的:在管理員創建一個具體數據庫后,應該為所有可以連接到該數據庫的用戶分別創建一個與用戶名相同的模式,然后,將search_path設置為"$user"。
比如說,我當前的用戶名為 xfe,則創建的 schema 也為 xfe,管理的角色是 super
CREATEUSER --interactive CREATE ROLE super LOGIN PASSWORD '123456'; CREATE SCHEMA xfe AUTHORIZATION super;
刪除
DROP SCHEMA xfe; #如果要刪除模式及其所有對象,請使用級聯刪除: DROP SCHEMA xfe CASCADE;
除了public和用戶創建的模式之外,每個數據庫都包含一個pg_catalog模式, 它包含系統表和所有內置數據類型、函數、操作符。pg_catalog總是搜索路徑中的一部分。 如果它沒有明確出現在路徑中,那么它隱含地在所有路徑之前搜索。
2.表空間
數據庫創建時,默認的所有者是當前創建數據庫的角色,默認的表空間是系統的默認表空間--pg_default。因為在PostgreSQL中,數據的創建是通過克隆數據庫模板來實現的。
系統默認會克隆 template1 數據庫,而 template1 數據庫的默認表空間是 pg_default,這個表空間是在數據庫初始化時創建的,所以所有template1中的對象將被同步克隆到新的數據庫中。
完整的創建數據庫語句應該是這樣
CREATE DATABASE dbname OWNER kanon TEMPLATE template1 TABLESPACE tablespacename;
3.表空間與模式
表空間是一個存儲區域,關聯數據落地位置。將表的數據存在一個較慢的磁盤上的表空間,而將表的索引存在於一個快速的磁盤上的表空間。一個表空間中可以存儲多個數據庫,盡管PostgreSQL不建議這么做。
模式是一個邏輯划分,主要用於區分權限。一個數據庫並不知直接存儲表結構等對象的,而是在數據庫中邏輯創建了至少一個模式,在模式中創建了表等對象,將不同的模式指派該不同的角色,可以實現權限分離,又可以通過授權,實現模式間對象的共享,並且,還有一個特點就是:public模式可以存儲大家都需要訪問的對象。
233
參考