1. 程式人生 > >PostgreSQL資料庫、表空間、角色及使用者

PostgreSQL資料庫、表空間、角色及使用者

一、建立資料庫
1、通過pgAdmin建立資料庫TestDb1:

開啟資料庫TestDb1看到建庫指令碼:


在目錄——PostgreSQL(pg_catalog)——資料表——pg_database中可以檢視多了一個數據庫TestDb1:
select oid,* from pg_database;

此時,在E:\PostgreSQL\data\base下的資料夾如下:


以上說明,建立的資料庫使用預設表空間(pg_default),資料資料夾使用oid命名。
同時,在E:\PostgreSQL\data\local下也會增加一些檔案。
注:PostgreSQL的oid:行的物件表示符(物件ID);PostgreSQL的xid:事務ID;
    這兩個ID都是4位元組的整數,在超過40億時將溢位,此後會出現重複,所以,假設它們唯一是錯誤的,除非你自己採取了措施來保證它們是唯一的。
   
2、通過psql命令列建立資料庫:


postgres=# create database "TestDb2";
CREATE DATABASE
postgres=#
postgres=# select oid,datname from pg_database;
  oid  |  datname 
-------+-----------
     1 | template1
 11905 | template0
 11913 | postgres
 16393 | TestDb1
 16394 | TestDb2
(5 行記錄)
從pgAdmin開啟,兩者建庫指令碼一樣,說明都是使用的預設引數;

二、建立表空間
1、通過pgAdmin建立表空間


建立表空間必須首先建空目錄,假設建資料夾:E:\PostgreSQL\data\TestDbs1,建表空間是選擇該目錄。
開啟表空間TestDbs1, 可以看到建表空間指令碼:


2、通過psql命令列建立表空間
postgres=# create tablespace "TestDbs2" location 'E:\PostgreSQL\data\TestDbs2';
CREATE TABLESPACE

三、建立角色、使用者
角色與使用者的區別:
角色就相當於崗位:角色可以是經理,助理。
使用者就是具體的人:比如陳XX經理,朱XX助理,王XX助理。
1、通過pgAdmin建立角色
建立角色TestRole1,輸入密碼,分配許可權,需要分配login許可權系統才會自動建立同名使用者TestRole1。
開啟角色TestRole1,可以看到建立角色指令碼:


2、通過psql命令列建立角色
postgres=# create role "TestRole2";
CREATE ROLE
postgres=# select rolname from pg_roles;
  rolname 
-----------
 postgres
 TestRole1
 TestRole2
(3 行記錄)
postgres=# select usename from pg_user;
  usename 
-----------
 postgres
 TestRole1
(2 行記錄)
postgres=# create role "TestRole3" login;
CREATE ROLE
postgres=# select rolname from pg_roles;
  rolname 
-----------
 postgres
 TestRole1
 TestRole2
 TestRole3
(4 行記錄)
postgres=# select usename from pg_user;
  usename 
-----------
 postgres
 TestRole1
 TestRole3
(3 行記錄)
角色TestRole2建立時沒有分配login許可權,所以沒有建立使用者;在pgAdmin的“登入角色”中看不到,到pg_authid中把rolcanlogin欄位由false改為true,系統自動建立同名使用者,此時在“登入角色”中才可以看到。
也可以通過sql命令給該角色分配login許可權,系統將自動建立同名使用者TestRole2:
postgres=# select usename from pg_user;
  usename 
-----------
 postgres
 TestRole1
 TestRole3
 TestRole2
(4 行記錄)
TestRole3角色建立時分配了login許可權,系統自動建立一個同名的使用者TestRole3。

通過psql命令列建立使用者
PostgreSQL的create role與create user命令是等效的,只是前者預設是非login的,而後者預設是login的。
postgres=# create user "TestUser11" with password 'TestUser11' login in role "TestRole1";
CREATE ROLE
postgres=# select rolname from pg_roles;
  rolname  
------------
 postgres
 TestRole1
 TestRole3
 TestRole2
 TestUser11
(5 行記錄)
postgres=# select usename from pg_user;
  usename  
------------
 postgres
 TestRole1
 TestRole3
 TestRole2
 TestUser11
(5 行記錄)
postgres=# create user "TestUser1";
CREATE ROLE
postgres=# select rolname from pg_roles;
  rolname  
------------
 postgres
 TestRole1
 TestRole3
 TestRole2
 TestUser11
 TestUser1
(6 行記錄)
postgres=# select usename from pg_user;
  usename  
------------
 postgres
 TestRole1
 TestRole3
 TestRole2
 TestUser11
 TestUser1
(6 行記錄)