RE: Transportar base de datos

Lists: pgsql-es-ayuda
From: "Tech" <tech(at)g-sistemas(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Transportar base de datos
Date: 2007-10-24 10:49:09
Message-ID: 20071024104918.EA080161859@spaceymail-a4.g.dreamhost.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola a todos.

Tengo varias bases de datos, creadas dentro del mismo tablespace, en un
servidor. Y tengo que llevarme alguna de estas bases de datos, a otro
servidor (que se instalara nuevo).

¿Cómo lo puedo hacer sin perder datos?, ¿Mediante backup’s?, ¿Debería de
crear el tablespace en el nuevo servidor?¿Como paso los usuarios?

Cualquier ayuda será bien recibida.

Gracias por adelantado.


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Tech <tech(at)g-sistemas(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-24 11:38:57
Message-ID: 20071024113857.GC5694@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Tech escribió:
> Hola a todos.
>
>
>
> Tengo varias bases de datos, creadas dentro del mismo tablespace, en un
> servidor. Y tengo que llevarme alguna de estas bases de datos, a otro
> servidor (que se instalara nuevo).
>
> ¿Cómo lo puedo hacer sin perder datos?, ¿Mediante backup’s?

Correcto, mediante pg_dump.

> ¿Debería de crear el tablespace en el nuevo servidor?

En realidad si no creas el tablespace va a quedar todo en el tablespace
por omision; no es obligatorio crearlo.

> ¿Como paso los usuarios?

pg_dumpall -g

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com>
To: Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Tech <tech(at)g-sistemas(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-25 11:54:23
Message-ID: 291597.75301.qm@web56306.mail.re3.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola

Alguien me podria respponder cuales son las razones
por las cuales no hay una forma más sencilla de
mover las bases de datos, por ejemplo copiando las
carpetas (o directorios) a la nueva máquina.

Gracias

--- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
escribió:

> Tech escribió:
> > Hola a todos.
> >
> >
> >
> > Tengo varias bases de datos, creadas dentro del
> mismo tablespace, en un
> > servidor. Y tengo que llevarme alguna de estas
> bases de datos, a otro
> > servidor (que se instalara nuevo).
> >
> > ¿Cómo lo puedo hacer sin perder datos?, ¿Mediante
> backup’s?
>
> Correcto, mediante pg_dump.
>
> > ¿Debería de crear el tablespace en el nuevo
> servidor?
>
> En realidad si no creas el tablespace va a quedar
> todo en el tablespace
> por omision; no es obligatorio crearlo.
>
> > ¿Como paso los usuarios?
>
> pg_dumpall -g
>
> --
> Alvaro Herrera
> http://www.CommandPrompt.com/
> The PostgreSQL Company - Command Prompt, Inc.
> --
> TIP 6: ¿Has buscado en los archivos de nuestra lista
> de correo?
>
> http://archives.postgresql.org/pgsql-es-ayuda
>

____________________________________________________________________________________
¡Sé un mejor asador!
Aprende todo sobre asados.
http://telemundo.yahoo.com/promos/mejorasador.html


From: Sebastián Villalba <sebastian(at)fcm(dot)unc(dot)edu(dot)ar>
To: Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Tech <tech(at)g-sistemas(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-25 12:12:08
Message-ID: 20071025120835.M74569@fcm.unc.edu.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On Thu, 25 Oct 2007 06:54:23 -0500 (CDT), Gregorio Diaz wrote
> Hola

Hola Gregorio...

> Alguien me podria respponder cuales son las razones
> por las cuales no hay una forma más sencilla de
> mover las bases de datos, por ejemplo copiando las
> carpetas (o directorios) a la nueva máquina.

Seguramente porque nadie lo desarrolló. Pero si te parece complicada la forma
como lo hace (a mí no me parece para nada complicado usar un pg_dump,
inclusive me parece muy cómodo) estás invitado a desarrollarlo. No te olvides
que PostgreSQL es un proyecto libre en el cual siempre son bienvenidos los
aportes.

> Gracias

Por nada.

p/d: Por favor, cuando respondas un mensajes, no respondas arriba... se
complica seguir el orden natural de lectura. Un cordial saludo...

-
-------------------------------------------
Sebastián Villalba
sebastian(at)fcm(dot)unc(dot)edu(dot)ar
-------------------------------------------


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com>
Cc: Tech <tech(at)g-sistemas(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-25 12:14:09
Message-ID: 20071025121409.GB5661@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Gregorio Diaz escribió:
> Hola
>
> Alguien me podria respponder cuales son las razones
> por las cuales no hay una forma más sencilla de
> mover las bases de datos, por ejemplo copiando las
> carpetas (o directorios) a la nueva máquina.

Porque los archivos por si solos no son independientes.

--
Alvaro Herrera http://www.PlanetPostgreSQL.org/
Voy a acabar con todos los humanos / con los humanos yo acabaré
voy a acabar con todos / con todos los humanos acabaré (Bender)


From: "usuario anonimo" <opinante(dot)anonimo(at)gmail(dot)com>
To: "Gregorio Diaz" <gregorio_diaz(at)yahoo(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, Tech <tech(at)g-sistemas(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-25 12:35:22
Message-ID: 91b524660710250535sabd553dq31b1689fb20e0ba4@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El 25/10/07, Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com> escribió:
> Hola
>
> Alguien me podria respponder cuales son las razones
> por las cuales no hay una forma más sencilla de
> mover las bases de datos, por ejemplo copiando las
> carpetas (o directorios) a la nueva máquina.

¿en algun gestor se puede hacer ?

>
> Gracias
>
> --- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
> escribió:
>
> > Tech escribió:
> > > Hola a todos.
> > >
> > >
> > >
> > > Tengo varias bases de datos, creadas dentro del
> > mismo tablespace, en un
> > > servidor. Y tengo que llevarme alguna de estas
> > bases de datos, a otro
> > > servidor (que se instalara nuevo).
> > >
> > > ¿Cómo lo puedo hacer sin perder datos?, ¿Mediante
> > backup's?
> >
> > Correcto, mediante pg_dump.
> >
> > > ¿Debería de crear el tablespace en el nuevo
> > servidor?
> >
> > En realidad si no creas el tablespace va a quedar
> > todo en el tablespace
> > por omision; no es obligatorio crearlo.
> >
> > > ¿Como paso los usuarios?
> >
> > pg_dumpall -g
> >
> > --
> > Alvaro Herrera
> > http://www.CommandPrompt.com/
> > The PostgreSQL Company - Command Prompt, Inc.
> > --
> > TIP 6: ¿Has buscado en los archivos de nuestra lista
> > de correo?
> >
> > http://archives.postgresql.org/pgsql-es-ayuda
> >
>
>
>
> ____________________________________________________________________________________
> ¡Sé un mejor asador!
> Aprende todo sobre asados.
> http://telemundo.yahoo.com/promos/mejorasador.html
> --
> TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo
>

--
_________________________________
Solo soy una mente genial en un cuerpo


From: "David Prieto" <davidp(at)sgth(dot)es>
To: "'Tech'" <tech(at)g-sistemas(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Transportar base de datos
Date: 2007-10-25 12:40:33
Message-ID: 011201c81704$3c3edd40$1701a8c0@pcdavid
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

> Alguien me podria respponder cuales son las razones
> por las cuales no hay una forma más sencilla de
> mover las bases de datos, por ejemplo copiando las
> carpetas (o directorios) a la nueva máquina.

Si quieres copiar todas las bases de datos que tienes en un servidor a un
servidor nuevo (y perder las bases de datos que posiblemente tuvieras en el
nuevo), puedes hacerlo como estás diciendo (copiar los directorios). Siempre
y cuando lo hagas estando el servidor de PostreSQL (tanto el de origen como
el de destino) parado, y te asegures de que en ambas máquinas tengas la
misma versión exactamente de PostgreSQL.

Si quieres copiar solamente una base de datos a otro servidor en el que a lo
mejor ya hay otras bases de datos, no puedes hacerlo copiando directorios,
ya que el sistema guarda información sobre las bases de datos que tiene,
usuarios, tablas... que tendrías que actualizar tú a mano, añadiendo la
información de la nueva base de datos que has copiado. Esto lo puedes hacer
tú a mano (con mucha paciencia, tocando tablas del sistema, cambiando
identificadores de tablas, índices, campos... y seguro que te terminas
equivocando), o puedes dejar que lo haga el pg_restore por ti.

Por otra parte... ¿seguro que copiar una carpeta de un servidor a otro es
mucho más senciullo que hacer un backup y luego restaurarlo? Yo creo que es
igual de complicado:

Tu solución:

1.-Parar postgresql en el servidor viejo
2.-Parar postgresql en el servidor nuevo
3.-Copiar las carpetas al servidor nuevo
4.-Levantar postgresql en el servidor nuevo
(esto suponiendo que estás copiando TODAS las bases de datos, y borrando lo
que tuviera el servidor nuevo).

La solución estándar:
1.-Generar una copia de seguridad de la/s base/s de datos que quieras en el
servidor viejo
2.-Copiar ese backup al servidor nuevo
3.-Restaurar el backup en el servidor nuevo

¿tan complicado es?

Un saludo,
David Prieto


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: usuario anonimo <opinante(dot)anonimo(at)gmail(dot)com>
Cc: Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com>, Tech <tech(at)g-sistemas(dot)com>, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Transportar base de datos
Date: 2007-10-25 12:42:09
Message-ID: 20071025124209.GG5661@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

usuario anonimo escribió:
> El 25/10/07, Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com> escribió:
> > Hola
> >
> > Alguien me podria respponder cuales son las razones
> > por las cuales no hay una forma más sencilla de
> > mover las bases de datos, por ejemplo copiando las
> > carpetas (o directorios) a la nueva máquina.
>
> ¿en algun gestor se puede hacer ?

Access, SQLite, Firebird (no se si en todos los casos), probablemente
MySQL en algunos gestores de tablas, etc.

--
Alvaro Herrera http://www.CommandPrompt.com/
PostgreSQL Replication, Consulting, Custom Development, 24x7 support


From: Javier Castro Narváez <javier(dot)castro(at)enfoque-si(dot)com>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Funcion recursiva
Date: 2007-10-25 14:26:54
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAKkeBIzMwzBIvVXVb9Vr3p/izwwAEAAAAGknJSwKBa1NjX1HJ8od3DMBAAAAAA==@enfoque-si.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola,

A ver si me podéis echar una manita y orientarme un poco a la hora de
realizar una función recursiva.
Dada una tabla con la siguiente estructura:

CREATE TABLE caracteristicas
(
id serial NOT NULL,
id_padre integer NOT NULL DEFAULT 0,
nombre character varying(50) NOT NULL,
CONSTRAINT caracteristicas_pkey PRIMARY KEY (id)
)
WITH OIDS;
ALTER TABLE caracteristicas OWNER TO "nfqPeople";
GRANT ALL ON TABLE caracteristicas TO "nfqPeople";

Que almacena por ejemplo la siguiente información estructurada de forma
arbórea:

1;"Color de Ojos";0
2;"Negros";1
3;"Azules";1
4;"Verdes";1
6;"Marrones";1
7;"Color de Pelo";0
8;"Rubio";7
9;"Moreno";7
10;"Castaño";7
11;"Pelirrojo";7
12;"Complexión";0
13;"Fuerte";12
14;"Delgado/a";12
15;"Corpulento";12
16;"Muy delgado/a";12
17;"Gordo";12

Lo que quiero es que la función recorra una deteterminada rama del árbol y
me devuelva una cadena con el resultado en función de un identificador que
se le pase. P.E. Caracteristica(11) me devolvería: "Color de Pelo ->
Pelirrojo"

Programar esto en un lenguaje como c# con una función recursiva no es
complicado ya que vas realizando múltiples select hasta que el id_padre = 0.
Trabajando con una variable static para almacenar los resultados
intermedios. Dado que la estructura permite infinitos niveles padre-hijo, se
puede llegar a realizar muchísimas consultas. Casi seguro que el rendimiento
seria infinitamente mejor si lo procesa el propio PostgreSQL.

La verdad es que salvo alguna función simple o un tigger no he programado
casi nada en Pl/SQL y ando un poco perdido.

Realizar una función recursiva para que devuelva multiples registros no es
dificil, pero creo, que este no es el caso.

Cualquier orientación será bienvenida.

Un saludo a todos,
Javier Castro


From: Oswaldo Hernández <listas(at)soft-com(dot)es>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion recursiva
Date: 2007-10-25 18:36:52
Message-ID: 4720E244.9060505@soft-com.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Javier Castro Narváez escribió:
> Hola,
>
> A ver si me podéis echar una manita y orientarme un poco a la hora de
> realizar una función recursiva.
> Dada una tabla con la siguiente estructura:
>
> CREATE TABLE caracteristicas
> (
> id serial NOT NULL,
> id_padre integer NOT NULL DEFAULT 0,
> nombre character varying(50) NOT NULL,
> CONSTRAINT caracteristicas_pkey PRIMARY KEY (id)
> )
> WITH OIDS;
> ALTER TABLE caracteristicas OWNER TO "nfqPeople";
> GRANT ALL ON TABLE caracteristicas TO "nfqPeople";
>
> Que almacena por ejemplo la siguiente información estructurada de forma
> arbórea:
>
> 1;"Color de Ojos";0
> 2;"Negros";1
> 3;"Azules";1
> 4;"Verdes";1
> 6;"Marrones";1
> 7;"Color de Pelo";0
> 8;"Rubio";7
> 9;"Moreno";7
> 10;"Castaño";7
> 11;"Pelirrojo";7
> 12;"Complexión";0
> 13;"Fuerte";12
> 14;"Delgado/a";12
> 15;"Corpulento";12
> 16;"Muy delgado/a";12
> 17;"Gordo";12
>
> Lo que quiero es que la función recorra una deteterminada rama del árbol y
> me devuelva una cadena con el resultado en función de un identificador que
> se le pase. P.E. Caracteristica(11) me devolvería: "Color de Pelo ->
> Pelirrojo"
>

Esta es la que me hize para un caso similar, no hay problema de nº de anidamientos, recorre todo el
arbol hacia atras hasta encontrar el root. Adaptatela a tus necesidades.

CREATE OR REPLACE FUNCTION grupo_get_path(nodo scid) RETURNS "varchar" AS
$BODY$
declare
v_ruta varchar := '';
v_irec record;
begin
select into v_irec * from grupos_nodos where idnodo = nodo;
if not found then
raise exception 'Grupo nº % desconocido.', nodo;
end if;
v_ruta := v_ruta || v_irec.descripcion;
if not v_irec.contenido_en is null then
v_ruta := grupo_get_path(v_irec.contenido_en) || ' / ' || v_ruta;
end if;
return v_ruta;

end
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

--
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************


From: Diego Gil <listas(at)adminsa(dot)com>
To: javier(dot)castro(at)enfoque-si(dot)com
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion recursiva
Date: 2007-10-25 19:41:59
Message-ID: 1193341319.2936.13.camel@roadwarrior.maipucinos.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El jue, 25-10-2007 a las 16:26 +0200, Javier Castro Narváez escribió:
> Hola,
>
> A ver si me podéis echar una manita y orientarme un poco a la hora de
> realizar una función recursiva.
> Dada una tabla con la siguiente estructura:
>
> CREATE TABLE caracteristicas
> (
> id serial NOT NULL,
> id_padre integer NOT NULL DEFAULT 0,
> nombre character varying(50) NOT NULL,
> CONSTRAINT caracteristicas_pkey PRIMARY KEY (id)
> )
> WITH OIDS;
> ALTER TABLE caracteristicas OWNER TO "nfqPeople";
> GRANT ALL ON TABLE caracteristicas TO "nfqPeople";
>
> Que almacena por ejemplo la siguiente información estructurada de forma
> arbórea:
>
> 1;"Color de Ojos";0
> 2;"Negros";1
> 3;"Azules";1
> 4;"Verdes";1
> 6;"Marrones";1
> 7;"Color de Pelo";0
> 8;"Rubio";7
> 9;"Moreno";7
> 10;"Castaño";7
> 11;"Pelirrojo";7
> 12;"Complexión";0
> 13;"Fuerte";12
> 14;"Delgado/a";12
> 15;"Corpulento";12
> 16;"Muy delgado/a";12
> 17;"Gordo";12
>
> Lo que quiero es que la función recorra una deteterminada rama del árbol y
> me devuelva una cadena con el resultado en función de un identificador que
> se le pase. P.E. Caracteristica(11) me devolvería: "Color de Pelo ->
> Pelirrojo"
>
> Programar esto en un lenguaje como c# con una función recursiva no es
> complicado ya que vas realizando múltiples select hasta que el id_padre = 0.
> Trabajando con una variable static para almacenar los resultados
> intermedios. Dado que la estructura permite infinitos niveles padre-hijo, se
> puede llegar a realizar muchísimas consultas. Casi seguro que el rendimiento
> seria infinitamente mejor si lo procesa el propio PostgreSQL.
>
> La verdad es que salvo alguna función simple o un tigger no he programado
> casi nada en Pl/SQL y ando un poco perdido.
>
> Realizar una función recursiva para que devuelva multiples registros no es
> dificil, pero creo, que este no es el caso.
>
> Cualquier orientación será bienvenida.
>
> Un saludo a todos,
> Javier Castro
>
> --
> TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda

Yo uso la funcion de abajo para retornar la ruta completa de una cuenta
de contabilidad. Es algo similar a lo que necesitas.

-- -->>>> DESDE AQUI <<<<<<

-- Function: functions.full_account_name(cod2 text)

-- DROP FUNCTION functions.full_account_name(cod2 text);

CREATE OR REPLACE FUNCTION functions.full_account_name(cod2 text)
RETURNS character varying AS
$BODY$

DECLARE v_account_id ALIAS FOR $1;
DECLARE tmp_record RECORD;
DECLARE tmp_id VARCHAR;
DECLARE tmp_name VARCHAR;

BEGIN
tmp_name:='';

SELECT INTO tmp_record * FROM accounting.charts_titles
WHERE accounting.charts_titles.hcode = v_account_id;

IF NOT FOUND THEN
RETURN ''::varchar;
END IF;

IF tmp_record.hcode = NULL THEN
RETURN tmp_record.hdenom;
END IF;

tmp_id := full_account_name(tmp_record.pcode);

IF tmp_record.hcode IS NOT NULL THEN
tmp_name := tmp_id::varchar || ' / ' || tmp_record.hdenom::varchar
|| '';
END IF;

RETURN tmp_name;
END;

$BODY$
LANGUAGE 'plpgsql' VOLATILE;

-- >>>>> HASTA AQUI <<<

La tabla a la que accede es :

-- Table: accounting.charts_titles

-- DROP TABLE accounting.charts_titles;

CREATE TABLE accounting.charts_titles
(
hcode character varying(15) NOT NULL,
pcode character varying(15),
hdenom character varying(120) NOT NULL,
CONSTRAINT charts_titles_pkey PRIMARY KEY (hcode)
)
WITHOUT OIDS;

-- Index: accounting.charts_titles_by_pcode

-- DROP INDEX accounting.charts_titles_by_pcode;

CREATE INDEX charts_titles_by_pcode
ON accounting.charts_titles
USING btree
(pcode);

donde hcode es id y pcode es id_padre. El registro que no tiene padre,
debe tener id_padre = NULL. Con esto deberias poder adaptarla a tus
necesidades.

Saludos,
Diego.


From: "omar neyra" <xomarx69(at)gmail(dot)com>
To: "Diego Gil" <listas(at)adminsa(dot)com>
Cc: javier(dot)castro(at)enfoque-si(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion recursiva
Date: 2007-10-25 20:36:59
Message-ID: 21b99cb00710251336l6c1c69abv7b4ebfb39c6162c6@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola a todos, a mi parecer no creo que utilizar una función recursiva sea la
mejor opción, recuerden que este tipo de funciones almacenan una copia en la
pila de la memoria cada ves que es llamada y esto puede provocar un quiebre
en memoria (en el peor de los casos, que es el que se debe medir siempre que
diseñamos algun algoritmo),
Para este caso pienso que es mejor implementar un ciclo simple, algo como
muestro a continuación;

CREATE OR REPLACE FUNCTION ruta(raiz INTEGER) RETURNS "varchar" AS
$BODY$
declare
ruta varchar := '';
descripcionreturn varchar := '';
begin
LOOP
select id_padre, descripcion from la_tabla where idraiz = raiz;
raiz := 'el id_padre que retorna el select anterior';
ruta := ruta || 'la descripcion obtenida en la consulta anterior';

if raiz = 0 then
return ruta; (o EXIT??)
END IF;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql';

como se dieron cuenta, este algoritmo no es valido ya que faltan algunos
pasos, lo que sucede es que recien estoy aprendiendo a usar postgres y aun
no se como solucionar la parte de recuperar los campos obtenidos en la
consulta, este algoritmo solo recupera un registro por cada consulta y no el
set completo de registros como sucederia con cada llamada recursiva
Creo que faltaria solucionar lo de la recuperacion instantanea de los campo
y si se me algo, bueno, lo arreglamos!!
--
OMAR NEYRA RODRÍGUEZ
Desarrollo y Soporte

CENTRO DE INFORMÁTICA Y COMPUTACIÓN
(Informatics and Computing Center)

UNIVERSIDAD DE LA SERENA

Tel/Phone (56 51) 282971
Celular: (56 9) 88770234
email: omneyra(at)userena(dot)cl
www.userena.cl


From: Diego Gil <listas(at)adminsa(dot)com>
To: omar neyra <xomarx69(at)gmail(dot)com>
Cc: javier(dot)castro(at)enfoque-si(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion recursiva
Date: 2007-10-25 21:44:29
Message-ID: 1193348669.2936.19.camel@roadwarrior.maipucinos.com.ar
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

El jue, 25-10-2007 a las 17:36 -0300, omar neyra escribió:
> Hola a todos, a mi parecer no creo que utilizar una función recursiva
> sea la mejor opción, recuerden que este tipo de funciones almacenan
> una copia en la pila de la memoria cada ves que es llamada y esto
> puede provocar un quiebre en memoria (en el peor de los casos, que es
> el que se debe medir siempre que diseñamos algun algoritmo),
> Para este caso pienso que es mejor implementar un ciclo simple, algo
> como muestro a continuación;
>
> CREATE OR REPLACE FUNCTION ruta(raiz INTEGER) RETURNS "varchar" AS
> $BODY$
> declare
> ruta varchar := '';
> descripcionreturn varchar := '';
> begin
> LOOP
> select id_padre, descripcion from la_tabla where idraiz = raiz;
> raiz := 'el id_padre que retorna el select anterior';
> ruta := ruta || 'la descripcion obtenida en la consulta
> anterior';
> if raiz = 0 then
> return ruta; (o EXIT??)
> END IF;
> END LOOP;
> END;
> $BODY$
> LANGUAGE 'plpgsql';
>
>
> como se dieron cuenta, este algoritmo no es valido ya que faltan
> algunos pasos, lo que sucede es que recien estoy aprendiendo a usar
> postgres y aun no se como solucionar la parte de recuperar los campos
> obtenidos en la consulta, este algoritmo solo recupera un registro por
> cada consulta y no el set completo de registros como sucederia con
> cada llamada recursiva
> Creo que faltaria solucionar lo de la recuperacion instantanea de los
> campo y si se me algo, bueno, lo arreglamos!!
> --
> OMAR NEYRA RODRÍGUEZ
> Desarrollo y Soporte

Es como esto :

CREATE OR REPLACE FUNCTION testfunc(raiz integer)
RETURNS text AS
$BODY$
DECLARE
aux integer;
ruta varchar := '';
tmp_record RECORD;

BEGIN
aux := raiz;

LOOP
select into tmp_record id, id_padre, nombre
from caracteristicas
where id = aux;

IF NOT FOUND THEN
EXIT;
END IF;

aux := tmp_record.id_padre;
ruta := ruta || ' - ' || tmp_record.nombre;
if aux = 0 then
exit;
END IF;
END LOOP;
return ruta;
END
$BODY$
LANGUAGE 'plpgsql' VOLATILE;


From: Alvaro Herrera <alvherre(at)commandprompt(dot)com>
To: omar neyra <xomarx69(at)gmail(dot)com>
Cc: Diego Gil <listas(at)adminsa(dot)com>, javier(dot)castro(at)enfoque-si(dot)com, pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Funcion recursiva
Date: 2007-10-25 22:05:28
Message-ID: 20071025220528.GL23566@alvh.no-ip.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

omar neyra escribió:
> Hola a todos, a mi parecer no creo que utilizar una función recursiva sea la
> mejor opción,

Cierto ... una alternativa es modelar los datos usando el contrib/ltree,
que permite contestar tus consultas de una sola pasada.

--
Alvaro Herrera http://www.CommandPrompt.com/
The PostgreSQL Company - Command Prompt, Inc.


From: Javier Castro Narváez <javier(dot)castro(at)enfoque-si(dot)com>
To: "'Diego Gil'" <listas(at)adminsa(dot)com>, "'omar neyra'" <xomarx69(at)gmail(dot)com>, 'Oswaldo Hernández' <listas(at)soft-com(dot)es>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Funcion recursiva
Date: 2007-10-26 08:23:12
Message-ID: !&!AAAAAAAAAAAYAAAAAAAAAKkeBIzMwzBIvVXVb9Vr3p/izwwAEAAAACo9QW1dNTRDvkH/+she/3YBAAAAAA==@enfoque-si.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

> -----Mensaje original-----
> De: pgsql-es-ayuda-owner(at)postgresql(dot)org
> [mailto:pgsql-es-ayuda-owner(at)postgresql(dot)org] En nombre de Diego Gil
> Enviado el: jueves, 25 de octubre de 2007 23:44
> Para: omar neyra
> CC: javier(dot)castro(at)enfoque-si(dot)com; pgsql-es-ayuda(at)postgresql(dot)org
> Asunto: Re: [pgsql-es-ayuda] Funcion recursiva
>
> El jue, 25-10-2007 a las 17:36 -0300, omar neyra escribió:
> > Hola a todos, a mi parecer no creo que utilizar una función
> recursiva
> > sea la mejor opción, recuerden que este tipo de funciones almacenan
> > una copia en la pila de la memoria cada ves que es llamada y esto
> > puede provocar un quiebre en memoria (en el peor de los
> casos, que es
> > el que se debe medir siempre que diseñamos algun
> algoritmo), Para este
> > caso pienso que es mejor implementar un ciclo simple, algo como
> > muestro a continuación;
> >
> > CREATE OR REPLACE FUNCTION ruta(raiz INTEGER) RETURNS "varchar" AS
> > $BODY$ declare
> > ruta varchar := '';
> > descripcionreturn varchar := '';
> > begin
> > LOOP
> > select id_padre, descripcion from la_tabla where
> idraiz = raiz;
> > raiz := 'el id_padre que retorna el select anterior';
> > ruta := ruta || 'la descripcion obtenida en la consulta
> > anterior';
> > if raiz = 0 then
> > return ruta; (o EXIT??)
> > END IF;
> > END LOOP;
> > END;
> > $BODY$
> > LANGUAGE 'plpgsql';
> >
> >
> > como se dieron cuenta, este algoritmo no es valido ya que faltan
> > algunos pasos, lo que sucede es que recien estoy
> aprendiendo a usar
> > postgres y aun no se como solucionar la parte de recuperar
> los campos
> > obtenidos en la consulta, este algoritmo solo recupera un
> registro por
> > cada consulta y no el set completo de registros como sucederia con
> > cada llamada recursiva Creo que faltaria solucionar lo de la
> > recuperacion instantanea de los campo y si se me algo, bueno, lo
> > arreglamos!!
> > --
> > OMAR NEYRA RODRÍGUEZ
> > Desarrollo y Soporte
>
> Es como esto :
>
> CREATE OR REPLACE FUNCTION testfunc(raiz integer)
> RETURNS text AS
> $BODY$
> DECLARE
> aux integer;
> ruta varchar := '';
> tmp_record RECORD;
>
> BEGIN
> aux := raiz;
>
> LOOP
> select into tmp_record id, id_padre, nombre
> from caracteristicas
> where id = aux;
>
> IF NOT FOUND THEN
> EXIT;
> END IF;
>
> aux := tmp_record.id_padre;
> ruta := ruta || ' - ' || tmp_record.nombre;
> if aux = 0 then
> exit;
> END IF;
> END LOOP;
> return ruta;
> END
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> --
> TIP 3: Si encontraste la respuesta a tu problema, publcala,
> otros te lo agradecern
>

Pues bien... Ya la tengo.... Gracias a todos por vuestra valiosa ayuda. Con
vosotros da gusto.

Al final me he decantado por no utilizar una función recursiva, ya que los
tiempos de respuesta son iguales y evito el problema de la pila.

Os dejo la función tal y como la he realizado:

CREATE OR REPLACE FUNCTION get_caracteristica(nodo integer, separador
character varying)
RETURNS character varying AS
$BODY$

DECLARE registro RECORD;
DECLARE caracteristica VARCHAR;
DECLARE tmp_id_padre INTEGER;

BEGIN
tmp_id_padre = nodo;
LOOP
select into registro id, id_padre, nombre from
caracteristicas where id = tmp_id_padre;
IF NOT FOUND THEN
EXIT;
END IF;
tmp_id_padre := registro.id_padre;
IF caracteristica IS NULL THEN
caracteristica := registro.nombre;
ELSE
caracteristica := registro.nombre || separador ||
caracteristica;
END IF;
IF tmp_id_padre = 0 THEN
EXIT;
END IF;
END LOOP;
RETURN caracteristica;
END

$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION get_caracteristica(nodo integer, separador character varying)
OWNER TO postgres;


From: "Vida Luz Arista" <vlal(at)ideay(dot)net(dot)ni>
To: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: LDAP y Postgresql
Date: 2007-10-26 21:52:56
Message-ID: 20071026215137.9D0A9C7C0E@mail.ideay.net.ni
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola a todos,

Tengo un Barracuda que requiere de LDAP para verificar si un email es
valido, mis usuarios en el servidor de correo son virtual user, es decir
están almacenados en una BD PostgreSQL, entonces necesito que el LDAP
trabaje en base a esa BD, vi algo sobre LDAP con Backend PostgreSQL pero no
encuentro documentación al respecto.

Alguien conoce sobre esto para que mi servidor de LDAP se comunique con esta
BD y a partir de esos datos crear los ldif para LDAP ?

Agradecería cualquier información.

Saludos,


From: "Agustin Casiva" <casivaagustin(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: LDAP y Postgresql
Date: 2007-10-29 10:44:27
Message-ID: 646eb5870710290344k109a95efy2822a72670b4d798@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On 10/26/07, Vida Luz Arista <vlal(at)ideay(dot)net(dot)ni> wrote:
> Hola a todos,
>
> Tengo un Barracuda que requiere de LDAP para verificar si un email es
> valido, mis usuarios en el servidor de correo son virtual user, es decir
> están almacenados en una BD PostgreSQL, entonces necesito que el LDAP
> trabaje en base a esa BD, vi algo sobre LDAP con Backend PostgreSQL pero no
> encuentro documentación al respecto.
>
> Alguien conoce sobre esto para que mi servidor de LDAP se comunique con esta
> BD y a partir de esos datos crear los ldif para LDAP ?
>
> Agradecería cualquier información.
>

Esto seguramente te aydara

http://www.samse.fr/GPL/ldap_pg/HOWTO/

Saludos

--
Agustin Casiva
http://www.osis.com.ar
casivaagustin(at)gmail(dot)com
http://www.casivaagustin.com.ar

Para leer adjuntos necesitará Open Office http://es.openoffice.org/programa/


From: Edwin Quijada <listas_quijada(at)hotmail(dot)com>
To: Gregorio Diaz <gregorio_diaz(at)yahoo(dot)com>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>, Tech <tech(at)g-sistemas(dot)com>
Cc: <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: RE: Transportar base de datos
Date: 2007-10-29 15:40:50
Message-ID: BAY105-W178CAF983FE17DBB8D8842E3910@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda


> Date: Thu, 25 Oct 2007 06:54:23 -0500> From: gregorio_diaz(at)yahoo(dot)com> Subject: Re: [pgsql-es-ayuda] Transportar base de datos> To: alvherre(at)commandprompt(dot)com; tech(at)g-sistemas(dot)com> CC: pgsql-es-ayuda(at)postgresql(dot)org> > Hola> > Alguien me podria respponder cuales son las razones> por las cuales no hay una forma más sencilla de> mover las bases de datos, por ejemplo copiando las> carpetas (o directorios) a la nueva máquina.> > Gracias

Por que es una base de datos no un manejador de files para eso tienes a FoxPro, Xbases..,
SQLLite y demas yerbas.

> > --- Alvaro Herrera <alvherre(at)commandprompt(dot)com>> escribió:> > > Tech escribió:> > > Hola a todos.> > > > > > > > > > > > Tengo varias bases de datos, creadas dentro del> > mismo tablespace, en un> > > servidor. Y tengo que llevarme alguna de estas> > bases de datos, a otro> > > servidor (que se instalara nuevo).> > > > > > ¿Cómo lo puedo hacer sin perder datos?, ¿Mediante> > backup’s?> > > > Correcto, mediante pg_dump.> > > > > ¿Debería de crear el tablespace en el nuevo> > servidor?> > > > En realidad si no creas el tablespace va a quedar> > todo en el tablespace> > por omision; no es obligatorio crearlo.> > > > > ¿Como paso los usuarios?> > > > pg_dumpall -g> > > > -- > > Alvaro Herrera > > http://www.CommandPrompt.com/> > The PostgreSQL Company - Command Prompt, Inc.> > --> > TIP 6: ¿Has buscado en los archivos de nuestra lista> > de correo?> > > > http://archives.postgresql.org/pgsql-es-ayuda> > > > > > ____________________________________________________________________________________> ¡Sé un mejor asador!> Aprende todo sobre asados. > http://telemundo.yahoo.com/promos/mejorasador.html> --> TIP 10: no uses HTML en tu pregunta, seguro que quien responda no podrá leerlo
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/