表空間
在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();