天天看點

PG基礎篇--邏輯結構管理(表空間、視圖)

表空間

在PG中,表空間實際是為表指定一個存儲目錄,在建立資料庫時可以為其指定預設的表空間。建立表、索引也可以指定表空間,這樣表,索引,就可以存儲到表空間對應的目錄下了。

建立表空間

create tablespace tbs_data location '/opt/data/';      

在建立資料庫時可以指定預設的表空間,這樣以後此資料庫中建立表,索引時就可以自動存儲到表空間指定的目錄下

指定預設表空間

create database db01 tablespace tbs_data;      

修改預設表空間

修改資料庫的預設表空間,執行該指令,不能有使用者連接配接到這個資料庫上,否則會報錯。

alter database db02 set tablespace tbs_data;      

改變表的預設表空間時,資料庫中已有表的表空間不會改變。

指定表空間

建立表或者索引或限制指定表空間

postgres=# create table test02(id int,note text) tablespace tbs_data;
CREATE TABLE
postgres=# create index idx_test02 on test02(id) tablespace tbs_data;
CREATE INDEX
postgres=# alter table test02 add constraint unique_test02_id unique(id) USING INDEX TABLESPACE tbs_data;
ALTER TABLE
postgres=# alter table test02 add constraint pk_test02_id primary key(id) USING INDEX tablespace tbs_data;
ALTER TABLE      

移動表所在表空間

postgres=# alter table test02 set tablespace pg_default;
ALTER TABLE      

在移動表的時候表會被鎖定,對此表的所有操作都将無法執行,包括select操作。

視圖

視圖就是由查詢語句定義的虛拟表。

建立視圖

CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] [ RECURSIVE ] VIEW name [ ( column_name [, ...] ) ]
    [ WITH ( view_option_name [= view_option_value] [, ... ] ) ]
    AS query
    [ WITH [ CASCADED | LOCAL ] CHECK OPTION ]      
create view vw_user AS select id,user_name,user_email from users;      

如果使用了TEMP或者TEMPORARY關鍵字,則session結束,這張視圖也會消失。

視圖修改各列定義

create VIEW vm_user(no,name,email,mark) AS select id,user_name,user_email,user_mark from users;      

可更新視圖

 從9.1版本開始,可以通過INSTEAD OF的觸發器來實作視圖更新

create trigger insert_vw_users_trigger
INSTEAD OF insert on vm_users
for each row execute procedure vm_users_insert_trigger();

create trigger update_vw_users_trigger
INSTEAD OF update on vm_users
for each row execute procedure vm_users_insert_trigger();

create trigger delete_vw_users_trigger
INSTEAD OF delete on vm_users
for each row execute procedure vm_users_insert_trigger();