From: | Felipe de Jesús Molina Bravo <fjmolinabravo(at)gmail(dot)com> |
---|---|
To: | pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | sentencia COPY en un procedimiento almacenado |
Date: | 2010-02-24 18:22:59 |
Message-ID: | c31298e51002241022t62d0c1e0o3c0b165edbcb35ea@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Que tal
Quiero optimizar la inserción a una tabla (se insertan varios registros en
una sola sentencia). Investigando resulto que la sentencia COPY es mas
rápida que un INSERT. La requiero usar en un procedimiento almacenado y lo
primero que intente fue lo siguiente:
drop table pba;
create table pba
(
id integer
);
CREATE OR REPLACE FUNCTION fnpba (
) RETURNS INTEGER AS
$$
DECLARE
sql text;
BEGIN
sql= E'COPY pba(id) FROM STDIN ;\n' ||
E'1\n' ||
E'2\n' ||
E'\.';
EXECUTE sql;
return 1;
END;
$$ LANGUAGE 'plpgsql';
Marca el siguiente error:
ERROR: syntax error at or near "1"
LÍNEA 2: 1
^
CONSULTA: COPY pba(id) FROM STDIN ;
1
2
.
Escape las diagonales y marco el sig. error:
ERROR: syntax error at or near "\"
LÍNEA 1: COPY pba(id) FROM STDIN ;\n1\n2\n\.
^
CONSULTA: COPY pba(id) FROM STDIN ;\n1\n2\n\.
CONTEXTO: PL/pgSQL function "fnpba" line 8 at EXECUTE statement
Investigando un poco acerca de COPY en una función plpgsql, encontre que
plpgsql (leguaje trust) no existe la "entrada estandard".
Por lo tanto intente probarlo en "plperlu" de la siguiente forma:
CREATE OR REPLACE FUNCTION fnpba (
) RETURNS INTEGER AS
$$
my $sql= "COPY pba(id) FROM STDIN ;\n1\n2\n\\.";
elog NOTICE, 'sql ' . $sql ;
my $r = spi_exec_query($sql);
return 1;
$$ LANGUAGE 'plperlu';
obteniendo el siguiente error:
aee=# select fnpba();
NOTICE: sql COPY pba(id) FROM STDIN ;
1
2
\.
ERROR: error from Perl function "fnpba": syntax error at or near "1" at
line 7.
aee=#
Según yo esto debería correr... no veo mi error ... o quizas no puede
ejecutarse el comando COPY desde un lenguaje procedural.
Habrá alguna solución para ejecutarlo en algún lenguaje procedural?
Continuare investigando .... si encuentro algo lo postearé .... voy a tratar
de ejecutarlo en C
Saludos y gracias de antemano
From | Date | Subject | |
---|---|---|---|
Next Message | Miguel Angel Hernandez Moreno | 2010-02-24 18:27:36 | Re: B-Tree o HASH |
Previous Message | Gerardo Herzig | 2010-02-24 18:19:38 | Re: B-Tree o HASH |