PostgreSQL::Snapshots
Como utilizar o Pg::Snapshots
Aqui está como utilizar o PostgreSQL::Snapshots:

Como superusuário do banco de dados (normalmente postgres, mas cheque no seu sistema), faça o seguinte:

INSTALAÇÃO

1. Carregue o PL/Perlu no seu banco de dados.  Veja a documentação do comando createlang para detalhes em como fazer isso;

2. Certifique-se que o DBI está instalado no seu sistema Perl e que o DBD do banco de dados escolhido também está instalado;

3. Edite o arquivo Makefile.sh, alterando a variável KEY para um valor "secreto" e a variável BASE_SCHEMA para o esquema onde serão colocadas as tabelas internas do Pg::Snapshot. Lembre-se também de configurar as demais variáveis como: SUPERUSER.

4. Execute no diretório raiz do PostgreSQL::Snapshots:
    # ./Makefile.sh

5. Carregue o driver para o banco de dados:
    - No PostgreSQL:
    # psql -d <database> -h <host> -U <user> -f ./drivers/pg/snapshot.sql
    - No Oracle, dento do SQL+:
    SQL> @./drivers/oracle/snapshot.sql

6. Carregue o arquivo pgsnapshots.sql:
    # psql -d <database> -h <host> -U <user> -f pgsnapshots.sql

7. Autorize o acesso da sua estação(ou do seu servidor remoto) a uma ou mais tabelas master para cada banco de dados:
    - Dentro do psql, conectado como usuário POSTGRES:
    db=# select snapshot_do('<key>', 'ALLOW', '<masterschema>', '<mastername>', '<ip>');
    - ou dentro do SQL+, conectado como usuário SYS:
    SQL> begin
         snapshot_do('<key>', 'ALLOW', '<masterschema>', '<mastername>', '<ip>');
         end;
         /

    Onde:
        <key> é o valor "secreto" colocado na variável KEY do arquivo Makefile.sh.
        <masterschema> é o esquema da tabela master que você deseja liberar
        <mastername> é o nome da tabela master que você deseja liberar
        <ip> é o endereço IP da estação/servidor para a qual você deseja liberar o acesso

8. Use as funções abaixo conforme necessário.

FUNÇÕES DISPONÍVEIS

1. create_dblink (implementação de "CREATE DBLINK")
    Essa função cria uma ligação entre banco de dados. Recebe como parâmetro o nome do DBLINK a ser criado, além dos dados necessários para o estabelecimento da conexão remota.
    
    Sintaxe:
    create_dblink(dblinkname text, datasource text, username text, password text, attributes text)
    dblinkname: nome do DBLINK a ser criado
    datasource: string de CONEXÃO Perl:DBI para o banco de dados remoto
    username: NOME do usuário no banco de dados remoto
    password: SENHA do usuário no banco de dados remoto
    attributes: atributos da conexão, tal como AutoCommit, RaiseErrors, etc.

2. drop_dblink (implementação de "DROP DBLINK")
    Essa função remove uma ligação entre banco de dados, recebendo como parâmetro apenas o nome do DBLink.
    
    Sintaxe:
    drop_dblink(dblinkname text)
    dblinkname: nome do DBLINK a ser removido

3. create_snapshot (implementação de "CREATE SNAPSHOT" ou "CREATE MATERIALIZED VIEW")
    Essa função cria uma visão materializada (MATERIALIZED VIEW ou SNAPSHOT) baseada em um consulta. Essa consulta pode, ou não, estar referenciando um DBLink.
    
    Sintaxe:
    create_snapshot(schemaname text, snapshotname text, query text, dblink text, refresh_method text, prebuilt_table text)
    schemaname: nome do esquema onde será criado o snapshot
    snapshotname: nome do snapshot a ser criado. Se prebuilt_table for fornecido, esse nome é apenas um nome fantasia, caso contrário, será o nome da tabela-resultado criada.
    query: consulta que será executada no servidor remoto e cujo resultado preencherá o snapshot no banco de dados local
    dblink: informação opcional que contém o nome do dblink a ser utilizado. Caso seja informado NULL, a consulta será enviada ao banco de dados local.
    refresh_method: pode ser COMPLETE, FAST ou FORCE.
    prebuilt_table: nome da tabela existente, no mesmo esquema do snapshot, sobre a qual o snapshot será criado (dados existentes são preservados). Este parâmetro é opcional.

  IMPORTANTE: a tabela não será preenchida por esse comando.

4. drop_snapshot (implementação de "DROP SNAPSHOT" ou "DROP MATERIALIZED VIEW")
    Essa função remove uma visão materializada (MATERIALIZED VIEW ou SNAPSHOT) recebendo como parâmetro o nome do Esquema e do Snapshot.
    
    Sintaxe:
    drop_snapshot (schemaname text, snapshotname text)
    schemaname: nome do esquema onde está o snapshot a ser removido
    snapshotname: nome do snapshot a ser removido

5. create_snapshot_log (implementação de "CREATE MATERIALIZED VIEW LOG" ou "CREATE SNAPSHOT LOG")
    Essa função cria uma tabela de logs acoplada a uma tabela master. Essa tabela de logs permite a criação de snapshots com atualização rápida (FAST REFRESH).
    
    Sintaxe:
    create_snapshot_log (schemaname text, mastername text, withwhat text)
    schemaname: nome do esquema onde está a tabela master
    mastername: nome da tabela master
    withwhat: indica se o snapshot log deve salvar a chave primária, o OID do registro ou ambos quando registros da tabela master forem atualizados(INSERT, UPDATE, DELETE). Esta cláusula também especifica se colunas adicionais para futura filtragem de sincronização, as quais não fazem parte da chave primária e são referenciadas pelo snapshot, devem ser salvas. A sintaxe é a seguinte:
        1) "PRIMARY KEY": indica que a chave primária de todos os registros atualizados na tabela master devem ser gravados no snapshot log;
        2) "OID": indica que o OID de todos os registros atualizados na tabela master devem ser gravados no snapshot log;
        3) "(<filter-columns>)" : uma lista separada por vírgulas e delimitada por parênteses especificando colunas de filtro adicionais a serem gravadas no snapshot log. Para snapshots atualizáveis pelo método FAST, definidos com subconsultas, todas as colunas referenciadas pela subconsulta devem ser gravadas no snapshot log;
        4) Qualquer combinação das opções acima, em qualquer ordem.

6. drop_snapshot_log (implementação de "DROP MATERIALIZED VIEW LOG" ou "DROP SNAPSHOT LOG")
    Essa função remove uma tabela de logs acoplada a uma tabela master.

    Sintaxe:
    drop_snapshot_log (schemaname text, mastername text)
    schemaname: nome do esquema onde está a tabela master
    mastername: nome da tabela master

7. refresh_snapshot (implementação de "DBMS_SNAPSHOTS.REFRESH")
    Essa função atualiza os dados de uma visão materializada (MATERIALIZED VIEW ou SNAPSHOT) recebendo como parâmetro o nome do esquema e do Snapshot.
    
    Sintaxe:
    refresh_snapshot (schemaname text, snapshotname text)
    schemaname: nome do esquema onde está o snapshot
    snapshotname: nome do snapshot a ser atualizado