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

Responder a