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