افزودن قابلیت auto increment به یک جدول postgresql با تریگر و بدون استفاده از sequence
لینک کوتاه یکشنبه , 17 آذر 1398 0 دیدگاه
احتمالا اگر با دیتابیس هایی مثل mysql کار کرده باشید با یک auto increment ساده میتونید فیلد های id رو بصورت auto increment مقدار دهی کنید که خب خیلی عالیه اما توی postgresql معمولا فیلد رو از نوع serial میسازن و خود pg زحمت ساخت یک sequence رو برامون میکشه و الباقی داستان !!
یکی از دوستان توی گروه میخواست به روش mysql اینکارو انجام بده و خب بلطبع راه کارش استفاده از یک تریگر هست !
خب ما یک جدول میسازیم با دو تا فیلد که یکیش id از نوع integer هست .
میتونید روی این فیلد هم index unique بذارید .
-- create table
CREATE TABLE "tbl" (
"id" integer,
"title" character varying(255)
);
کاری که باید انجام بدیم ساخت یک تریگر هست که زمانی که یک insert داخل این جدول رخ میده ، max(id) رو در بیاره و +1 بکنه و برای رکورد جدید اعمال بکنه
-- create function
create or replace function id_increment_tbl()
returns trigger as
$BODY$
DECLARE
an_integer int4 ;
begin
select (max(id)::integer + 1) into an_integer from tbl ;
if an_integer IS NULL then
an_integer:=1;
end if;
NEW.id := an_integer;
return NEW;
end;
$BODY$
LANGUAGE plpgsql;
-- create trigger
CREATE TRIGGER idincrementTrigger
BEFORE INSERT
ON tbl
FOR EACH ROW
EXECUTE PROCEDURE id_increment_tbl();
و حالا تست میکنیم
insert into tbl(title) values ('test');