Error al agregar nuevo contacto a Persona - G3.18.0

Buenos días,

Por pedido del área alumnos comenzamos a hacer unos cambios en la[b] tabla mdp_personas_contactos[/b] del G3.18.0. Concretamente, nos pedian que pasemos todos los correos "@udc.edu.ar" a Principal (contacto_tipo = 'MP'), y todo los que no sean "@udc.edu.ar" a Secundario (contacto_tipo = 'MS').
Esto se realiza con un script (que dejo al final del mensaje), y como algunos registros tenian el mismo mail en diferente tipo (ej: MI y MP), se corre otro script para dejar 1 solo registro cuando el mail esta repetido.
Hasta acá todo viene bien, se cambian los tipos y se borran los duplicados. El problema es que si ahora quiero agregar un nuevo contacto desde el Sistema Gestión, me sale el error que adjunto. 


Investigando un poco, aparentemente se pierde la secuencia de la tabla para agregar nuevos registros. Corro los siguientes comandos, pero el error sigue:

SELECT setval(‘negocio.mdp_personas_contactos_seq’,nextval(‘negocio.mdp_personas_contactos_seq’)-1);

y luego

SELECT currval(‘negocio.mdp_personas_contactos_seq’) as seq;

Éste último comando me devuelve el siguiente resultado: 12836, por lo que entiendo que se está ejecutando correctamente.


No sé como hacer para que se pueda volver a agregar nuevos contactos a las personas desde el Sistema de Gestión.


Desde ya muchas y espero alguna ayuda, saludos!

scripts utilizados

– ## actualización de mail secundario (MS) cuando el email NO ES ‘udc.edu.ar’ ##
update mdp_personas_contactos pc
set contacto_tipo = case when email not like ‘%udc.edu.ar%’ then ‘MS’ else pc.contacto_tipo end;

– ## actualización de mail principal (MP) cuando el email ES ‘udc.edu.ar’ ##
update mdp_personas_contactos pc
set contacto_tipo = case when email like ‘%udc.edu.ar%’ then ‘MP’ else pc.contacto_tipo end[/size];

– ## elimino los registros de email repetidos ##

delete from mdp_personas_contactos t1
using mdp_personas_contactos t2
where t1.ctid < t2.ctid
and t1.email = t2.email[/size];


Error nuevo contacto - Guarani - Administrar Personas.png

Error nuevo contacto - Guarani - Administrar Personas.png

Hola Nicolás,

El comando para actualizar el valor de la secuencia es:

SET SEARCH_PATH = 'negocio';
SELECT setval('mdp_personas_contactos_seq',(SELECT MAX(persona_contacto) FROM mdp_personas_contactos));

Podrían probarlo?

Saludos, Florencia.

Buenos días,

Despues de probar la solución, continúa el mismo inconveniente al querer agregar un contacto a cualquier persona desde el Sistema de Gestión. Sigue saliendo el cartel de error que dice:

"
SQLSTATE: db_55000

CODIGO: 7

MENSAJE: ERROR: currval de la secuencia «mdp_personas_contactos_seq» no está definido en esta sesión

SQL: SELECT currval(“mdp_personas_contactos_seq”) as seq; – toba_log: 1138067221
"

Si corro las siguientes consultas en la base, me devuelve lo siguiente:

set search_path to 'negocio';  => devuelve "Query returned successfully in 770 msec."

select max(persona_contacto) from mdp_personas_contactos;    => devuelve  10286 (integer).

select setval('mdp_personas_contactos_seq',(select max(persona_contacto) from mdp_personas_contactos));  => devuelve  10286 (bigint)

select currval('mdp_personas_contactos_seq');   => devuelve  10286 (bigint)

No sé porqué sigue diciendo que "no esta definido en esta sesión".

Desde ya muchas gracias, quedo a la espera de alguna otra solución, saludos!

Agrego más información:

Ésto es lo que figura en la definición de la secuencia "mdp_personas_contactos_seq" dentro del esquema "negocio":

-- SEQUENCE: negocio.mdp_personas_contactos_seq

-- DROP SEQUENCE negocio.mdp_personas_contactos_seq;

CREATE SEQUENCE negocio.mdp_personas_contactos_seq
    INCREMENT 1
    START 1
    MINVALUE 1
    MAXVALUE 9223372036854775807
    CACHE 1;

ALTER SEQUENCE negocio.mdp_personas_contactos_seq
    OWNER TO postgres;

También adjunto 2 capturas de las propiedades de la secuencia: tab "General" (archivo 01) y tab "Definition" (archivo 02).

negocio-mdp_personas_contactos_seq - 01.png

negocio-mdp_personas_contactos_seq - 01.png

negocio-mdp_personas_contactos_seq - 02.png

negocio-mdp_personas_contactos_seq - 02.png

Hola,

Alguna sugerencia mas sobre éste error? ya probé actualizar la secuencia y aún no puedo agregar nuevos contactos a las Personas, faltará correr algún parámetro de guaraní? Esto es sumanente necesario ya que estan haciendo las pre-inscripciones y se debe agregar las cuentas personales a mano, gracias y saludos!!

Hola Nicolas, borraste la secuencia?
Porque no debió dejarte borrar la secuencia ya que forma parte del DEFAULT del campo “persona_contacto” de la tabla “mdp_personas_contactos”.

Si intentas insertar un registro por la base en esa tabla, te da error?
Por ejemplo:

SET search_path = negocio;
INSERT INTO mdp_personas_contactos (persona,contacto_tipo,email) VALUES (1,'MP', 'aaaa@bbb');

Si da error, corre lo siguiente:

set search_path = negocio;
SELECT setval('mdp_personas_contactos_seq',(SELECT MAX(persona_contacto) FROM mdp_personas_contactos));
SELECT currval('mdp_personas_contactos_seq'::text); 

¿Que valor da el ultimo select (current value)?

Para que el currval debe ejecutarse el nextval antes, porque sino en la sesion no existe un valor actual de esa secuencia, es decir:
Si corres esto, da el error que mencionas:

set search_path = negocio;
SELECT currval('mdp_personas_contactos_seq'::text);

Pero si ejecutas lo sigiuente, no da el error, ya que antes se ejecutó el “nextval”, el cual setea en la sesion el valor actual de esa secuencia y se puede obtener con el “currval”:

set search_path = negocio;
SELECT nextval('mdp_personas_contactos_seq'::text);
SELECT currval('mdp_personas_contactos_seq'::text);

Sugerencia: No uses el nombre del esquema con el nombre de la secuencia o cualquier objeto al crear o consultar, para eso lo que tenes que hacer es el “set search_path” antes con el nombre del esquema, en este caso “negocio”.

Proba actualizar el default del campo persona_contacto, por si quedó mal:


set search_path = negocio;
ALTER TABLE mdp_personas_contactos ALTER COLUMN persona_contacto SET DEFAULT nextval('mdp_personas_contactos_seq'::text);
SELECT setval('mdp_personas_contactos_seq',(SELECT MAX(persona_contacto) FROM mdp_personas_contactos));

Hola, buenos días!

Probando ésta solución anduvo perfecto!
Una vez que anduvo el "agregar contacto" a Personas en el Sistema de Gestión, volví a correr los scripts que puse en el 1er comentario (que da origen al mensaje en el foro), y veo que en lo que me equivoqué y rompí la secuencia fué que hice una copia de la tabla, (como bkp)  e hice las pruebas, [b]cuando no funcionaban bien, borraba la tabla mdp_personas_contactos y la volvia a crear desde la copia bkp que había hecho[/b]. La verdad que el resto de los scripts (update y eliminar duplicados) no rompieron nada, pero claro, al eliminar la tabla se corta la secuencia! 

Bueno, ya quedo anotado para no cometer estos errores nuevamente y [b]mil gracias por la ayuda![/b] saludos!

Ups… te olvidaste de contar parte de la historia. :slight_smile:
El error fue supongo cuando volviste a crear la tabla mdp_personas_contactos, creando el campo “persona_contacto” de la siguiente forma:
persona_contacto INTEGER DEFAULT nextval(‘negocio.mdp_personas_contactos_seq’::text);

Como te comentaba antes, primero setea el esquema y luego crea/borra/actualiza/consultá objetos en la base sin anteponer el nombre del esquema en las tablas/secuencias/funciones/…

Si si,

La verdad no me habia puesto a pensar bien en eso, lo que yo corrí en un principio fue lo siguiente:

-- seteo el esquema 'negocio' por defecto para las consultas
set search_path to 'negocio';

 -- elimino la tabla de copia para las pruebas 
drop table if exists mdp_personas_contactos_bkp; 
--drop table if exists mdp_personas_contactos; 

-- creo una copia de la tabla mdp_personas_contactos para hacer pruebas 
create table mdp_personas_contactos_bkp as (select * from mdp_personas_contactos); 
--create table mdp_personas_contactos as (select * from mdp_personas_contactos_bkp);

Como lo primero que hacía era hacer una copia de los registros en otra tabla, pense que era como un bkp completo de la tabla (con secuencias y todo), entonces si me equivocaba, borraba y volvía a copiar los datos de la tabla bkp y pasarla como "original" nuevamente, pero bueno, se ve que le erré feísimo.[/font][/size][font=Courier New][size=14px]

Desde ya mcuchas gracias y disculpen! Saludos!