Ecco il mio codice di esempio per il partizionamento: t_master è una vista di essere selezionate/inserimento/aggiornamento/cancellazione nell'applicazione t_1 e t_2 è le tabelle sottostanti in realtà la memorizzazione del dati.
create or replace view t_master(id, col1)
as
select id, col1 from t_1
union all
select id, col1 from t_2
CREATE TABLE t_1
(
id bigint PRIMARY KEY,
col1 text
);
CREATE TABLE t_2
(
id bigint PRIMARY KEY,
col1 text
);
CREATE OR REPLACE FUNCTION t_insert_partition_function()
returns TRIGGER AS $$
begin
raise notice '%s', 'hello';
execute 'insert into t_'
|| (mod(NEW.id, 2)+ 1)
|| ' values ($1, $2)' USING NEW.id, NEW.col1 ;
RETURN NULL;
end;
$$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION t_update_partition_function()
returns TRIGGER AS $$
begin
raise notice '%s', 'hello';
execute 'update t_'
|| (mod(NEW.id, 2)+ 1)
|| ' set id = $1, col1 = $2 where id = $1'
USING NEW.id, NEW.col1 ;
RETURN NULL;
end;
$$
LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION t_delete_partition_function()
returns TRIGGER AS $$
begin
raise notice '%s', 'hello';
execute 'delete from t_'
|| (mod(OLD.id, 2)+ 1)
|| ' where id = $1'
USING OLD.id;
RETURN NULL;
end;
$$
LANGUAGE plpgsql;
CREATE TRIGGER t_insert_partition_trigger instead of INSERT
ON t_master FOR each row
execute procedure t_insert_partition_function();
CREATE TRIGGER t_update_partition_trigger instead of update
ON t_master FOR each row
execute procedure t_update_partition_function();
CREATE TRIGGER t_delete_partition_trigger instead of delete
ON t_master FOR each row
execute procedure t_delete_partition_function();
ringrazio molto per il vostro grande intuizione! – Brambo76
+1 Molto informativo! –
Proprio come un punto dati, il nostro negozio ha oltre 300 milioni di righe in una delle nostre tabelle più accessibili, senza partizioni o sharding, e funziona perfettamente.Per ridefinire alcuni dei fattori sopra citati, i fattori critici per rendere utile il partizionamento sono la presenza di una chiave di partizione che viene spesso utilizzata per limitare le righe di interesse nelle query e che desiderano rilasciare periodicamente un'intera partizione. (È molto più veloce rilasciare una partizione piuttosto che cancellare 1/12 delle tue righe). – kgrittn