Bom dia a todos,

  Segue abaixo um FAQ que eu escrevi com o objetivo de ajudar a quem usa o 
Firebird e quer usar também o PostgreSQL.
  Caso achem interessante, alguém poderia colocar no portal do 
postgresql.org.br.

--------------------------------------------------------------------------------

P: Tem como desativar Triggers e Índices?

R: Diferente do Firebird, no Postgres não é possivel desativar uma Trigger ou
   um Índice. O que pode ser feito é excluí-los e posteriormente reinclui-los
   quando necessário.

--------------------------------------------------------------------------------

P: Que utilitários estão disponíveis?

R: Segue abaixo a lista de alguns utilitários e seu similar em Firebird.

   PSql: Similar ao ISql
   pgAdmin3: Similar ao IBConsole
   EMS SQL Manager: Similar ao IBExpert
   Slony: Similar ao IB-Replicator
   PGDump/PGRestore: Similar ao GBAK

--------------------------------------------------------------------------------

P: No Firebird cada base de dados fica armazenada em um único arquivo. E no
   Postgres, onde fica fisicamente armazenada a base de dados?

R: No Postgres a base de dados é dividida N arquivos que ficam armazenados no
   diretório "base", que por sua vez faz parte do "cluster" (diretório) criado
   para armazenar as bases de dados gerenciadas pelo servidor.

--------------------------------------------------------------------------------

P: Quais são os principais arquivoS de configuração?

R: São os arquivos "postgresql.conf" (configurações gerais) e "pg_hba.conf" (
   configurações de acesso).

--------------------------------------------------------------------------------

P: Existe algo similar a opção "external_files" para importar rapidamente
   dados residentes em arquivo texto?

R: Sim. Para isso existe o comando "copy".

--------------------------------------------------------------------------------

P: Onde ficam armazenadas as mensagens geradas pelo Postgres?

R: As mensagens de inicialização ficam no arquivo "pgstartup.log". Já as mensa-
   gens de operações realizadas pelo banco ficam em arquivos armazenados no
   diretório "pg_log".

--------------------------------------------------------------------------------

P: Existem instaladores dos binários para Linux?

R: Oficialmente existem instaladores somente para RedHat/AS, RedHat/ES e Fedora.
   Nas demais distribuições é necessário baixar os fontes e compilar. No 
entanto,
   independente da distribuição, o ideal é compilar, pois isso deixa o Postgres
   otimizado para o hardware usado.

--------------------------------------------------------------------------------

P: Se alguém fizer uma cópia da base de dados e levá-la para outra máquina,
   ele poderá acessar os dados, assim como acontece com o FireBird?

R: Sim. Mas o mesmo acontece com outros bancos como o Oracle, DB2, etc.

--------------------------------------------------------------------------------

P: O tamanho da base de dados à ser criada deve ser definida previamente, ou
   ela se expande conforme a necessidade?

R: Se expande conforme a necessidade.

--------------------------------------------------------------------------------

P: Que ferramentas podem ser usadas para fazer as cópias de segurança?

R: Use os utilitários "pg_dump" e "pg_restore".

--------------------------------------------------------------------------------

P: Como fica o backup das tabelas que possuem campos com conteúdo binário?

R: Basta utilizar o "pg_dump" com a opção "-b".

--------------------------------------------------------------------------------

P: Como saber se uma base está corrompida?

R: vacuumdb -U sysdba -d <nome da base> -v

--------------------------------------------------------------------------------

P: Exite alguma ferramenta para reparar bases corrompidas?

R: Algumas podem ser encontradas nos seguintes sites:
   - http://svana.org/kleptog/pgsql/pgfsck.html
   - http://www.hjackson.org/blog/archives/2004/12/postgresql_data.html

--------------------------------------------------------------------------------

P: Em acesso local, é mais rápido usar "localhost" em vez do IP?

R: Sim, pois com "localhost" os pacotes não passam pela placa de rede.

--------------------------------------------------------------------------------

P: Existem Store-Procedures no Postgres?

R: Não. Mas as funções podem desempenhar o mesmo papel.

--------------------------------------------------------------------------------

P: Como faço para converter uma Stored-Procedure selecionável (que retorna
   N linhas)?

R: Crie um tipo registro e faça uma função que retorne este tipo.
   Exemplo:

   create type RET_FUNCAO as (
     Cmp1 numeric(3,0),
     Cmp2 numeric(9,2),
     Cmp3 date,
     Cmp4 varchar(3)
   );

   create or replace function PCD_FUNCAO(
     Prm_Cmp1 date,
     Prm_Cmp2 varchar(6)
   ) returns setof RET_FUNCAO as $$
   declare
     result RET_FUNCAO;
   begin
     while ...
       .
       .
       result.Cmp1 := 10;
       result.Cmp2 := 23.56;
       result.Cmp3 := '31.12.2099';
       result.Cmp4 := 'Abc'
       return next result;
     end;
     return;
   end;
   $$ language 'plpgsql';

--------------------------------------------------------------------------------

P: Existe o recurso de levantar, a partir de funções e triggers, uma exceção?

R: Sim. Use "raise exception".

--------------------------------------------------------------------------------

P: Tudo o que ocorre dentro de uma Função está em uma transação implícita?

R: Sim.

--------------------------------------------------------------------------------

P: Como apagar o fonte das funções escritas em PgSql?

R: Diferente do Firebird, não tem como fazer isso, visto que elas são interpre-
   tadas pelo Postgres.

--------------------------------------------------------------------------------

P: O processo do "Vacuum" irá travar a base?

R: Sim, se for usada a opção "-f".

--------------------------------------------------------------------------------

P: Qualquer erro dento de uma transação irá aborta-lá?

S: Sim. Será efetuado um "rollback".

--------------------------------------------------------------------------------

P: Qual é o formato padrão de data? Tem como alterar?

R: É o americano. Para alterar deve-se incluir no arquivo "postgresql.conf" o
   parâmetro "datestyle". Exemplo: datestyle = 'European'

--------------------------------------------------------------------------------

P: Quais são os formatos de data e hora que podem ser usados?

R: "dd/mm/aaaa", "dd.mm.aaaa", "aaaa-mm-dd" e "dd-mm-aaaa" para datas e
   "hh:mm:ss" para horas.

--------------------------------------------------------------------------------

P: Existe data zero?

R: Não. Do mesmo modo como o FireBird.

--------------------------------------------------------------------------------

P: Que tipo de campo deve ser usado para armazenar dados binários?

R: Use o tipo "bytea".

--------------------------------------------------------------------------------

P: Que tipo de campo deve ser usado para armazenar textos longos?

R: Use o tipo "text".

--------------------------------------------------------------------------------

P: Para que serve o OID? É necessário usá-lo.

R: É um identificador único para cada registro. Pode ser usado para fazer rela-
   cionamento de registro entre tabelas. Se ele for usado para isso, no proces-
   so de backup deve ser especificado para que esta informação seja gerada junto
   com os dados.

--------------------------------------------------------------------------------

P: Quanto tempo leva para respoder quando é gerado um "deadlock"? Na hora ou
   somente quando é encerrada (commit) a transação que está bloqueando o regis-
   tro?

R: Somente quando é encerrada. Mas, ao contrário do Firebird, não gera
   "DeadLock". Passa a valer a alteração feita pela última transação efetuada.

--------------------------------------------------------------------------------

P: Como são classificados os campos com conteúdo NULO?

R: É igual ao do Firebird, ou seja, o valor nulo classifica-se mais alto do que
   outro valor.

--------------------------------------------------------------------------------

P: Como comportam-se funções de agregação (SUM, etc) quando existe nulos?

R: Os valores nulos não são considerados.

--------------------------------------------------------------------------------

P: Como comportam-se cálculos contendo campos nulos (Ex: 1 + null)?

R: Qualquer operação em que um dos valores seja "null" o resultado será sempre
   "null". Para evitar isso, pode ser utilizada a função "coalesce".

--------------------------------------------------------------------------------

P: Como executar funções que não retornam valores?

R: Use o comando "perform".

--------------------------------------------------------------------------------

P: Existe algum conversor de base do Firebird para Postgres?

R: Existem algumas ferramentas, como o CaseStudio e o DBManager, que fazem enge-
   nharia reversa permitindo assim montar uma base em Postgres a partir de outra
   do Firebird. No entanto nenhuma faz a conversão de Store-Procedures e 
Triggers.
   Portanto a conversão destas deve ser feita manualmente ou atravez de uma fer-
   ramenta desenvolvida internamente.

--------------------------------------------------------------------------------

P: Em um "select ... into", se a consulta retornar 0 linhas, que valores serão
   gravados nas variáveis de destino?

R: Serão gravados valores nulos nas variáveis destinos. Já no Firebird, neste
   caso não é alterado o conteúdo das variáveis.

--------------------------------------------------------------------------------

P: Quando é feita uma consulta envolvendo agrupamento (group by), no Firebird a
   lista retorna ordenada conforme os campos do agrupamento. Como isso funciona
   no Postgres?

R: Já no PGS isso não ocorre. Portanto, quando for utilizar uma consulta com
   agrupamento e deseja que os dados retornem ordenados, é necessário usar a
   clausula "order by".

--------------------------------------------------------------------------------

Sem mais,

Marlon David de Souza
Desenvolvimento
Sysmo Informática Ltda
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a