-
先轉成 postgres 使用者:
#su - postgres
-
利用 psql 指令,連入資料庫:
$psql
postgres=# \c btrecord
btrecord=#
-
複刻一個與原來表格相同的主表格:
btrecord=# CREATE TABLE Trecords (like Orecords including all);
-
查看已複刻的表格:
btrecord=#\d Trecords
-
建立一個繼承主表格的子表格:
btrecord=# CREATE TABLE score_2017 (like Trecords including all) INHERITS (Trecords);
-
設定子表格的約束,只同意某一年份的資料寫入:
btrecord=# ALTER TABLE score_2017 add constraint partition_check CHECK ("score_time" >= '2017-01-01'::date AND "score_time" < '2018-01-01'::date);
- 使用觸發程序來分類資料,寫入子表格內:
btrecord=# CREATE OR REPLACE FUNCTION score_record_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF ( NEW.'score_time'>= '2017-01-01'::date AND NEW.'score_time' < '2018-01-01'::date) THEN
INSERT INTO score_2017 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'Date out of range. Fix the score_record_trigger() function';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER score_record_trigger
BEFORE INSERT ON Trecords
FOR EACH ROW EXECUTE PROCEDURE score_record_trigger();
- 將原來的資料表內容,寫入主表格:
btrecord=#INSERT INTO Trecords (select * from Orecords);
- 若要刪除子表格,可直接刪除,不影響主表格:
btrecord=#DROP TABLE Trecords;
- 若要刪除主表格,不可直接刪除!但追加 CASCADE 則可將所有表格刪除:
btrecord=#DROP TABLE Trecords CASCADE;