فرض کنید ما تیبلی برای ذخیره سازی مطالب وبلاگ در نظر میگیرم
کد:
CREATE TABLE "post" (
"id" serial NOT NULL,
"title" character varying(255) NOT NULL,
"user_id" integer NOT NULL,
"story" text NOT NULL,
"status" smallint NOT NULL DEFAULT '1'
);
ابتدا سه جدول میسازیم که از جدول مادر ارث بری کنند و در هر جدول حوزه مجاز id را با دستور check مشخص میکنیم .
کد:
CREATE TABLE POST1000
(
PRIMARY KEY (id) ,
CHECK(id>0 AND id<=1000)
) INHERITS (post);CREATE TABLE POST2000
(
PRIMARY KEY (id) ,
CHECK(id>1000 AND id<=2000)
) INHERITS (post);
CREATE TABLE POST3000
(
PRIMARY KEY (id) ,
CHECK(id>2000 AND id<=3000)
) INHERITS (post);
کد:
CREATE INDEX "post1000_id" ON "post1000" ("id");
CREATE INDEX "post2000_id" ON "post2000" ("id");
CREATE INDEX "post3000_id" ON "post3000" ("id");
کد:
CREATE OR REPLACE FUNCTION post_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF (NEW.id>0 and NEW.id<=1000) THEN
INSERT INTO post1000 VALUES (NEW.*);
ELSIF (NEW.id>1000 and NEW.id<=2000) THEN
INSERT INTO post2000 VALUES (NEW.*);
ELSIF (NEW.id>2000 and NEW.id<=3000) THEN
INSERT INTO post3000 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'id is not valid for insert in partition table!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
کد:
CREATE TRIGGER insert_post_trigger
BEFORE INSERT ON post
FOR EACH ROW EXECUTE PROCEDURE post_trigger();
کد:
INSERT INTO "post" ("id", "title", "user_id", "story", "status")
VALUES
('1', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('3', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('1000', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('1001', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('1002', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('1999', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2000', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2001', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2002', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2003', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2999', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('2998', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('3000', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ,
('999', 'عنوان مطلب', '1', 'توضیحات مطلب', '1') ;
کد:
SET constraint_exclusion = on;
ین آموزش روی رکوردهای پایین انجام شده ، دقت کنید که بستگی به دیتاهای شما دارد ، ترجیحا از پارتهای زیادی استفاده نکنید چون هر چند پارتیشن بندی سرعت خواندن را افزایش میدهد سرعت insert,update را کند میکند (البته نه به همان نسبت )
پس در استفاده از این قابلیت زیاده روی نکنید
با تشکر ، رضا شیخله
لینک منبع : http://www.rezaonline.net/blog/howto-cre...erits.html
php مرکز کد های سایت...برچسب : نویسنده : استخدام کار phpco بازدید : 166