Primeiro, creio que você esteja falando de "particionamento de tabelas", e
não "replicação horizontal" (o último pode se confundir com outras
técnicas).
Correto. Perdoem meu erro...
Quanto à sua dúvida. Uma prática comum é que a tabela pai fique *sempre*
vazia, e coloca-se uma trigger BEFORE INSERT nesta para redirecionar as
inserções da tabela pai para as tabelas filhas.
Agora, para garantir FK, costuma-se usar um tabela shadow (sombra). Nesta
tabela vai ter apenas uma cópia da chave primária da tabela sendo
particionada (geralmente uma chave artificial int/bigint auto-incrementada),
e esta também vai ser um chave primária dessa tabela, assim sendo, sempre
que precisar de uma chave estrangeira para a tabela particionada, faz-se a
chave para esta tabela shadow. Mesmo tendo muitos registros, eles são
compostos apenas de uma coluna com um índice, logo a verificação costuma ser
rápida o suficiente.
Deixa ver se entendi:
Tabela pai:
CREATE TABLE movto
(
record bigserial,
data date NOT NULL,
documento character varying(10) NOT NULL,
...
...
CONSTRAINT "pk-movto-record" PRIMARY KEY (record)
) ;
// Tabela shadow
CREATE TABLE movto_shadow
(
record bigserial,
CONSTRAINT "pk-movto-record" PRIMARY KEY (record)
) ;
// tabelas de dados históricos
CREATE TABLE movto_hist1
(
record bigint NOT NULL,
data date NOT NULL DEFAULT now(),
documento character varying(10) NOT NULL,
CONSTRAINT "pk-movto_hist1-record" PRIMARY KEY (record),
CONSTRAINT "fk-movto_hist1-record" FOREIGN KEY (record)
REFERENCES movto_shadow (record) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION
)
CREATE TABLE movto_hist2
(
record bigint NOT NULL,
data date NOT NULL DEFAULT now(),
documento character varying(10) NOT NULL,
CONSTRAINT "pk-movto_hist2-record" PRIMARY KEY (record),
CONSTRAINT "fk-movto_hist2-record" FOREIGN KEY (record)
REFERENCES movto_shadow (record) MATCH SIMPLE
ON UPDATE CASCADE ON DELETE NO ACTION
)
Daí monta-se uma view pra mostrar os dados pegando dos dois históricos...
não sei se entendi corretamente, mas me parece um tanto trabalhoso.
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral