Re: Problema al restaurar una BD

From: Mario Rodriguez <mario(dot)irs(at)gmail(dot)com>
To: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Problema al restaurar una BD
Date: 2012-02-13 15:10:26
Message-ID: CAEOd6CYS_vE2Q3ZBdAsu4mC90q4zrspBJ6Zn0kygJ=_YB4rOFg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

> Hola a todos, he detectado el problema que me estaba generando el error al
> momento de restaurar mi BD, resulta que al analizar el archivo de respaldo
> logré aislar el problema ya que es un respaldo muy grande, resulta que la
> función llamada "ptjpizqvdcc", por la que preguntaba Alvaro, estaba
> declarada para el esquema e2011, esta función se usa en un CONSTRAINT que
> tiene mi tabla llamada pxi_cat_calculados, anexo la definición de la tabla
> como aparece en el respaldo:
>
>
>
CREATE TABLE pxi_cat_calculados (
idprodxintegrar integer NOT NULL,
desglose text NOT NULL,
izqvun public.racional,
idclase integer NOT NULL,
idpreftemp integer NOT NULL,
idrefgeo integer NOT NULL,
izq public.racional NOT NULL,
estadoint character(1) DEFAULT '1'::bpchar,
dcc character(1) DEFAULT '0'::bpchar,
CONSTRAINT pxi_cat_calculados_dcc CHECK (((dcc >= '0'::bpchar) AND (dcc
<= '3'::bpchar))),
CONSTRAINT pxi_cat_calculados_dcc_3 CHECK ((((dcc = '3'::bpchar) AND
(izqvun OPERATOR(public.=) public.ptjpizqvdcc())) OR ((dcc = ANY
(ARRAY['0'::bpchar, '1'::bpchar, '2'::bpchar])) AND ((izqvun
OPERATOR(public.>) public.ptjpizqvdcc()) OR ((izqvun)::text = '(0,
0)'::text))))),

CONSTRAINT pxicat_calculado_estadoint_check CHECK (((estadoint >=
'1'::bpchar) AND (estadoint <= '3'::bpchar)))
);

entonces al ver el respaldo antes de hacer el COPY de los datos tiene el
siguiente search_path:

SET search_path = e2011, pg_catalog;

entonces la función si está en el esquema e2011 pero el tipo de dato que
regresa esta en public que viene siendo el tipo RACIONAL y marca el error.

Cambié la función al esquema public para que concordara con el tipo y al
hacer el respaldo si pone el search_path como:

SET search_path = public, pg_catalog;

pero vuelve a marcarme el mismo error.

Hasta que modifico la definición de la tabla, es que ya no me marca error,
o sea la dejo como sigue:

CREATE TABLE pxi_cat_calculados (
idprodxintegrar integer NOT NULL,
desglose text NOT NULL,
izqvun public.racional,
idclase integer NOT NULL,
idpreftemp integer NOT NULL,
idrefgeo integer NOT NULL,
izq public.racional NOT NULL,
estadoint character(1) DEFAULT '1'::bpchar,
dcc character(1) DEFAULT '0'::bpchar,
CONSTRAINT pxi_cat_calculados_dcc CHECK (((dcc >= '0'::bpchar) AND (dcc
<= '3'::bpchar))),
--CONSTRAINT pxi_cat_calculados_dcc_3 CHECK ((((dcc = '3'::bpchar) AND
(izqvun OPERATOR(public.=) public.ptjpizqvdcc())) OR ((dcc = ANY
(ARRAY['0'::bpchar, '1'::bpchar, '2'::bpchar])) AND ((izqvun
OPERATOR(public.>)
) OR ((izqvun)::text = '(0, 0)'::text))))),
CONSTRAINT pxi_cat_calculados_dcc_3 CHECK ((((dcc = '3'::bpchar) AND
(izqvun OPERATOR(public.=) '(1, 2)'::public.racional)) OR ((dcc = ANY
(ARRAY['0'::bpchar, '1'::bpchar, '2'::bpchar])) AND ((izqvun
OPERATOR(public.>) '(1, 2)'::public.racional) OR ((izqvun)::text = '(0,
0)'::text))))),
CONSTRAINT pxicat_calculado_estadoint_check CHECK (((estadoint >=
'1'::bpchar) AND (estadoint <= '3'::bpchar)))
);

si se fijan el CONSTRAINT donde traigo problema lo dejé en comentario, y lo
que me regresab la función "ptjpizqdcc" lo cambié por lo que regresa y asi
es como si funciona.

De todo esto, me surgen las siguientes dudas:
1.- ¿Porque postgresql no pone en el respaldo el search_path también con el
esquema public?
2.- si le indico en el CONSTRAINT en que esquema esta la función
(public.ptjpizqvdcc()) ¿porque aún me marca error?
3.- ¿Es correcto usar funciones en los CONSTRAINT's?

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2012-02-13 16:38:10 Re: Tabla inserta constantemente registros
Previous Message Mario Rodriguez 2012-02-13 14:58:26 Re: Problema al restaurar una BD