循序漸進PostgreSQL(三): 網絡訪問配置、用戶及角色管理、表空間及數據庫創建

前邊若干文章,只是簡單的介紹了一下PG的手動安裝和啓動。

如:
http://blog.csdn.net/iihero/article/details/8254115 (安裝FAQ)

循序漸進PostgreSQL: 實現PostgreSQL自啓動
循序漸進PostgreSQL: 學習pqxx C++ API訪問

使用C編寫的動態鏈接庫爲PostgreSQL數據庫添加自定義函數

要正常使用PG,也必須要瞭解它的基本網絡配置、用戶權限以及數據庫是如何創建,掌握了這些,其它的用法與別的數據庫基本上也就大同小異了。

1. 網絡配置

默認情況下, PG的配置文件:

postgresql.conf裏有一行:
listen_addresses = 'localhost';
在pg_hba.conf裏有另外幾行:
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
意思是隻監聽本機,對本機的所有用戶都是trust,無需密碼即可訪問。 IP地址限制爲127.0.0.1,  /32的意思是32個bit都是有效地址。
我要限制只有網段10.128.98.*上的主機才能訪問,首先,要修改postgresql.conf,
listen_addresses = '*';
再在pg_hba.conf里加一行:
host     all                all                10.128.98.0/24            md5

(注,如果你只想某臺機器訪問,e.g. 10.128.98.4, 使用10.128.98.4/32 即可,表示32位全部是有效地址)

對所有網段全開放:
#IPV4
host    all             all             0.0.0.0/0                 md5
#IPV6
host    all             all             ::/0                    md5
IPV6什麼時候會用到,當你用psql -h <hostname> 而不是IP地址的時候,可能會碰到。
具體的描述定義,可以參照:http://www.postgresql.org/docs/8.2/static/datatype-net-types.html

在此以後,就可以從別的主機上訪問本機的數據庫了。

2. 用戶、組及角色, 以及schema創建與管理
PG裏頭的角色與用戶是有區分開的,有些細微區別。和別的數據庫不一樣。記住就好。
它的user相當於role加上一個login, 它的group相當於role加一個nologin的限制, 即本質上都是role. 這就能解釋爲什麼你create完一個role之後,又不能登錄的奇怪現象了。

iihero=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 spring    | Superuser, Create role, Create DB              | {}

創建一個新用戶spring2, 帶有createdb createuser 權限
iihero=# create user spring2 password 'spring1' createdb createuser;
CREATE ROLE
iihero=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 spring    | Superuser, Create role, Create DB              | {}
 spring2   | Superuser, Create DB                           | {}

問題:
iihero=# create table spring2.t1(id int);
ERROR:  schema "spring2" does not exist
爲何不能創建spring2下的表呢? 因爲PG有schema的概念。user spring2並不等於schema爲spring2.
要想正常使用,還得爲spring2創建一個同名的schema
iihero=# create schema spring2 authorization spring2;
CREATE SCHEMA
iihero=# create table spring2.t1(id int);
CREATE TABLE
我們切到spring2的session下邊,查查看:
iihero=# set session authorization spring2;
SET
iihero=# \d
        List of relations
 Schema  | Name | Type  | Owner
---------+------+-------+--------
 spring2 | t1   | table | spring
(1 row)
能看到剛纔創建的表.

也可以創建不同的schema名稱:
iihero=# create schema spring_new authorization spring2;
CREATE SCHEMA
iihero=# create table spring_new.t1(id int);
CREATE TABLE
創建同名的schema的簡要做法是將中間的schema名稱省去。這樣它與user名就完全相同。
iihero=# create schema authorization spring2;
CREATE SCHEMA

因此,在創建完帶密碼的用戶之後,需要一步創建同名的schema,即完成與別的數據庫等效的功能。
下邊是創建用戶、schema、建對應表、刪除的完整順序實驗:
iihero=# create user spring3 password 'spring1';
CREATE ROLE
iihero=# create schema authorization spring3;
CREATE SCHEMA
iihero=# create table spring3.t1(id int);
CREATE TABLE
iihero=# insert into spring3.t1 values(1), (2);
INSERT 0 2
iihero=# select * from spring3.t1;
 id
----
  1
  2
(2 rows)


iihero=# drop table spring3.t1;
DROP TABLE
iihero=# drop user spring3;
ERROR:  role "spring3" cannot be dropped because some objects depend on it
DETAIL:  owner of schema spring3
iihero=# drop schema spring3;
DROP SCHEMA
iihero=# drop user spring3;
DROP ROLE



3. 表空間、數據庫創建
PG裏支持表空間的概念,並且一個表空間可以放置多個數據庫(雖然,實際上很少這麼做),一個數據庫實際上也可以置於多個表空間,比如將其中的某些表指定到不同的表空間裏。

通常情況下,用戶會選擇不同的數據庫,創建不同的表空間,或者創建一個不同位置的表空間,以提高相應性能。

下邊是簡單的示例, 使用psql控制檯或者純命令行都是可以的:
 create tablespace demospace location 'd:/pgsql92latest/demo';
iihero=# create database demo encoding 'latin1' template template0 OWNER spring tablespace demospace;
CREATE DATABASE
iihero=# drop database demo;
DROP DATABASE
或者:
D:\pgsql92latest>createdb  --tablespace=demospace -e --encoding=latin1 --owner=spring --template=template0 demo
CREATE DATABASE "demo" OWNER spring TABLESPACE demospace ENCODING 'latin1' TEMPLATE template0;
或者
D:\pgsql92latest>createdb -Ddemospace -e -Elatin1 -Ospring -Ttemplate0 demo
CREATE DATABASE demo OWNER spring TABLESPACE demospace ENCODING 'latin1' TEMPLATE template0;


總結:
使用PG時,能做到基本手動安裝,配置網絡訪問限制,創建數據庫用戶及對應的schema,並能依次清除。
這樣,才能進入下一步的基本管理與開發,對於開發人員來說,有了與schema相應的概念,後邊的東西應該都是類似的。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章