[pgbr-geral] Migrar 8.0 para 9.3

2015-11-18 Por tôpico Danilo Silva
Pessoal,

É possível migrar um banco na versão 8.0.15 diretamente para a versão 9.3
ou 9.4?

Tentei efetuar na 9.3, porém apresentou alguns erros, como por exemplo:

CREATE FUNCTION lo_in(cstring) RETURNS lo LANGUAGE c IMMUTABLE STRICT AS
'$libdir/lo', 'lo_in';
ERRO:  não pôde encontrar função "lo_in" no arquivo
"/usr/lib/postgresql/9.3/lib/lo.so"

Algumas tabelas possuem campos do tipo "large object" para guardar imagens,
será necessário efetuar alguma configuração do lado da versão 9.3, ou devo
instalar algo?

[]s
Danilo
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Migrar 8.0 para 9.3

2015-11-18 Por tôpico Rafael Fialho
>
> Pessoal,
>
>
É possível migrar um banco na versão 8.0.15 diretamente para a versão 9.3
> ou 9.4?
>

Sim. Mas é necessário observar que todas as conversões explícitas não
existirão mais. Consultas que comparam campos integer com varchar, por
exemplo, sem fazer cast, não irão funcionar. Operações com like/ilike em
campos inteiros também deixam de funcionar, etc..
Para migrar você deve realizar o dump com a versão de destino, ou seja, 9.3
ou 9.4.


> Tentei efetuar na 9.3, porém apresentou alguns erros, como por exemplo:
>
> CREATE FUNCTION lo_in(cstring) RETURNS lo LANGUAGE c IMMUTABLE STRICT AS
> '$libdir/lo', 'lo_in';
> ERRO:  não pôde encontrar função "lo_in" no arquivo
> "/usr/lib/postgresql/9.3/lib/lo.so"
>

Você efetuou o backup conforme descrito acima?


>
> Algumas tabelas possuem campos do tipo "large object" para guardar
> imagens, será necessário efetuar alguma configuração do lado da versão 9.3,
> ou devo instalar algo?
>
>
Sim, o parâmetro bytea_output para escape, e normalmente
standard_conforming_strings para off.

[]'s
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Re: [pgbr-geral] Sobre Trigger PostgreSQL 9.4.5

2015-11-18 Por tôpico José Henrique Beraldo
Opa Tiago, boa noite. Desculpe não retornar antes.
O script abaixo, é um exemplo que criei para simular as diferenças de
comportamento. Fiz a correção na Foreign Key da tabela filho para postergar
a verificação e deu certo, como marquei no script abaixo em "vermelho".
O grande problema que tenho no momento, de comportamento diferente, é a
trigger da tabela filho, se precisar recuperar algo na tabela pai no
registro que ainda está para ser confirmado, isso ele retorna NULL, sendo
que o mesmo script no banco 7.4 funciona normalmente.


CREATE TABLE qion.tab_pai (
  tp_id BIGINT DEFAULT nextval('qion.tab_pai_id_seq'::regclass) NOT NULL,
  tp_descricao VARCHAR(50) NOT NULL,
  tp_data DATE,
  tp_valor MONEY,
  CONSTRAINT tab_pai_pkey PRIMARY KEY(tp_id)
)
WITH (oids = false);

CREATE TABLE qion.tab_filho (
  tf_id BIGSERIAL,
  tf_tb_id BIGINT NOT NULL,
  tf_data DATE,
  tf_confirmacao_trigger_pai_id BIGINT,
  CONSTRAINT tab_filho_pkey PRIMARY KEY(tf_id),
  CONSTRAINT tab_filho_fk FOREIGN KEY (tf_tb_id)
REFERENCES qion.tab_pai(tp_id)
ON DELETE CASCADE
ON UPDATE CASCADE
   * DEFERRABLE*
*INITIALLY DEFERRED*
)
WITH (oids = false);

CREATE OR REPLACE FUNCTION public.f_tab_pai (
)
RETURNS trigger AS
$body$
DECLARE
  vVariavel INTEGER;
  rRecord RECORD;

BEGIN

   INSERT INTO qion.tab_filho
   (tf_tb_id,tf_data)
   VALUES
   (NEW.tp_id,
CURRENT_DATE
);

   RETURN NEW ;

END ;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;



CREATE TRIGGER tab_pai_tr
  BEFORE INSERT
  ON qion.tab_pai FOR EACH ROW
  EXECUTE PROCEDURE public.f_tab_pai();



CREATE OR REPLACE FUNCTION public.f_tab_filho (
)
RETURNS trigger AS
$body$
DECLARE
  rRecord RECORD;

BEGIN
  SELECT INTO rRecord tp_id,tp_data FROM qion.tab_pai WHERE
tp_id=NEW.tf_tb_id;
  -- Aqui nesse suposto exemplo de resgatar o valor do registro que ainda
não foi confirmado na tabela pai, por alguma
  -- necessidade para que essa trigger funcione, o valor que retorna é
NULL, diferentemente dessa mesma estrutura rodando
  --em um banco 7.4.30.
  --mesmo que essa trigger seja alterada para AFTER, não funciona.

   raise exception 'rRecord.tp_id % tp_data
%',rRecord.tp_id,rrecord.tp_data; -- NULL,NULL seria o retorno

   NEW.tf_confirmacao_trigger_pai_id=rRecord.tp_id;

   RETURN NEW ;

END ;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;


CREATE TRIGGER tab_filho_tr
  BEFORE INSERT
  ON qion.tab_filho FOR EACH ROW
  EXECUTE PROCEDURE public.f_tab_filho();



---
Obrigado...



*José  Henrique Beraldo*
Tel: 017 3331-7770
Cel: 017 99979-4669

*Linkedin   **linkedin.com/in/josehenriqueberaldo
*

*Twitter  @henriqueberaldo*

*Facebook facebook.com/henriqueberaldo
*

*Skypejosehenriqueberaldo*




Em 17 de novembro de 2015 22:25, Tiago José Adami 
escreveu:

>
> Em 17/11/2015 8:16 PM, "José Henrique Beraldo" 
> escreveu:
> >
> > Boa noite.
> > Estou fazendo uma manutenção em um banco de dados 7.4 que foi migrado
> para o 9.4, e o comportamento das triggers mudou.
> > O que percebi é que triggers que funcionam no 7.4 se comportam diferente
> na versão 9.5, por exemplo:
> > 1) quando a tabela pai tem uma trigger que escreve na tabela filho, e a
> tabela filho, normalmente tem uma foreign key do pai, ai dá o erro de
> verificação da constraint.
> > Outro problema que ví, é que na trigger before do pai, ele escreve na
> tabela filho, e na tabela filho tem uma trigger after que precisa coletar o
> registro que ainda está em New da tabela pai, e esse registro não é
> encontrado, diferentemente do 7.4.
> > Preciso reescrever ou há alguma coisa que possa fazer?
> > Obrigado.
> >
> Pelo o que entendi, se o disparo "do" trigger (tradução: gatilho) na
> tabela pai for Before Insert, este comportamento é esperado.
>
> A solução que imagino é alterar o trigger para after Insert na tabela pai.
> Poste o código para que eu e os demais colegas da lista possamos visualizar
> uma possível solução, só pela explicação ficou um pouco difícil de
> entender.
>
> Tiago J. Adami
>
> ___
> pgbr-geral mailing list
> pgbr-geral@listas.postgresql.org.br
> https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
>
___
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral