From: | Alejandro Gasca <agasca(at)yahoo(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | problema con copy from |
Date: | 2006-01-15 06:07:51 |
Message-ID: | 20060115060752.47044.qmail@web34306.mail.mud.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Hola.
Pues estoy empezando a usar el postgre, y tengo la version 7.4.7.
Tengo un problema con la siguiente consulta:
Delete from cat_lineas;
copy cat_lineas from '/home/lmpg_catlineas.txt' WITH DELIMITER '~';
copy lim_municipales from '/home/lmpg_lim_munis.txt' WITH DELIMITER
'~';
cat_lineas y lim_municiples estan relacionadas, y cuando se borra un
registro en cat_lineas se borran los relacionados en lim_municipales.
Si introduzco linea por linea la consulta en, por ejemplo, el psql,
hace lo que quiero que haga: que borre cat_lineas, sus subordinadas (en
este caso lim_municipales) y que inserte los datos.
Como va a ser una consulta de uso comun, se me ocurrio meterla en una
funcion sql (digamos actualiza_limites()), y estar llamándola con:
select actualiza_limites();
El problema es que, al momeno de llamar la función, la tabla
lim_municipales parece no darse cuenta de que ya borraron registros y
aparece un error de registros duplicados...
este error tambien ocurre cuando ejecuto la consulta usando el
phpPgAdim, aunque en ese caso, puedo poner:
Begin;
Delete from cat_lineas;
End;
copy cat_lineas from '/home/lmpg_catlineas.txt' WITH DELIMITER '~';
copy lim_municipales from '/home/lmpg_lim_munis.txt' WITH DELIMITER
'~';
y se soluciona el asunto... el problema, como saben, es que no se puede
poner transacciones en una función de sql...
lo me se confunde es que aparentemente hace cosas diferentes si la
misma (?) consulta se ejecuta de maneras diferentes: si ejecuto desde
el prompt de psql la ejecuta "bien", si la pongo en la ventana de sql
del phpPgAdmin la hace "mal", y si la pongo en una funcion sql la hace
"mal"...
en fin... alguna sugerencia?
La definiciones de tabla son las siguientes:
CREATE TABLE cat_lineas (
handle character(6),
lim_muni "path"
);
CREATE UNIQUE INDEX cal_lineas_principal ON cat_lineas USING btree
(handle);
CREATE TABLE lim_municipales (
cve_edo character(2) NOT NULL,
cve_mpo character(3) NOT NULL,
handle character(6) NOT NULL
);
ALTER TABLE ONLY lim_municipales
ADD CONSTRAINT ref_lineas_lim_muni FOREIGN KEY (handle) REFERENCES
cat_lineas(handle) ON UPDATE CASCADE ON DELETE CASCADE;
ALTER TABLE ONLY lim_municipales
ADD CONSTRAINT lim_municipales_principal UNIQUE (cve_edo, cve_mpo,
handle);
CREATE FUNCTION actualiza_limites () RETURNS void
AS 'Delete from cat_lineas;
Delete from lim_municipales;
copy cat_lineas from ''/home/lmpg_cat_lineas.txt'' WITH DELIMITER
''~'';
copy lim_municipales from ''/home/lmpg_lim_munis.txt'' WITH DELIMITER
''~'';
'
LANGUAGE sql;
--Gracias!
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Ana Giral | 2006-01-15 12:07:42 | Mondrian y postgresql |
Previous Message | Alvaro Herrera | 2006-01-15 02:16:49 | Re: Sesiones en Php+postgre |