2014-12-12 10:13 GMT-02:00 Márcio A. Sepp <[email protected]>:
>
>
>
> 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...
>
>
>

Não se preocupe. Errar nessa lista é permitido... :)



> 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,
>

Não seria um bigserial, e sim bigint, o valor deve ser populado por sua
trigger.



> [...]
>
>
>
> Daí monta-se uma view pra mostrar os dados pegando dos dois históricos...
>


Não. Apesar de possível, a maneira mais comum é utilizando herança. Como
você estava falando de FK, achei que já tinha domínio dessa parte, desculpe
por não ser claro.

Mas seguinte, esqueça por um momento essa questão das FKs. Leia toda a
série de artigos to Fábio Telles sobre particionamento [1], é uma grande
série (premiada até :] ) e vai detalhando bem esse assunto. Volte aqui com
as dúvidas que ainda tiver.




> não sei se entendi corretamente, mas me parece um tanto trabalhoso.
>
>
>
>
É de fato é bem trabalhoso mesmo, acho que disso ninguém discorda... :(

Mas ei... Funciona! :)


[1] http://savepoint.blog.br/particionamento-de-tabelas-no-postgres-quando/
(veja no final a sessão "Na Sequência" para um link aos demais da série)

Atenciosamente,
-- 
Matheus de Oliveira
Analista de Banco de Dados
Dextra Sistemas - MPS.Br nível F!
www.dextra.com.br/postgres
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a