Vous n'êtes pas identifié(e).
Pages : 1
Vous comprenez bien que cette mise à jour se fait en tenant compte des règles d'isolation standard, et vous pouvez donc réinitialiser à une valeur inférieure à ce qui pourrait exister une fois une transaction concurrente committée, ce qui aurait comme conséquence de retourner des valeurs déjà utilisées. Et dans ce cas, de nombreuses requêtes pourraient échouer, soit immédiatement soit longtemps après, en fonction de l'activité concurrente.
Je n'avais pas pris cet élément en compte, car dans mon cas et pour cette db, je n'ai pas de transaction concurrente.
Merci pour le rappel à l'ordre
Je reviens car pour ne pas incrémenter inutilement, j'ai ajouter ceci dans mon script, a adapter en fonction des ses tables et séquences (Merci Alban)
SELECT setval('testing_hash_id_seq', MAX(id), true) FROM testing_hash;
D'après l’explication de Guillaume, non !
Oui largement, j'avais lu 2.31 pour le bigserial
Merci de l'info.
Ok, du coup, faut que je trouve une autre façon de gérer mes id, j'imagine que j'aurais moins de souci avec un uuid ? car vu la doc un bigserial c'est 2 exp 31
Merci pour la réponse.
Du coup, est-il possible de modifier la séquence pour utiliser les id's non utilisés ?
Bonjour,
j'ai une fonction qui fait un genre de merge
DECLARE
v_email_ad varchar;
v_email_perso varchar;
v_annee_academique integer;
v_email_ordre integer;
v_classe varchar;
v_matric_rs integer;
v_numero integer;
v_statut varchar;
v_qualite varchar;
v_groupe varchar;
v_orientation varchar;
v_resultat_final varchar;
v_id_people integer;
v_numero_localisa integer;
v_date_debut date;
v_date_fin date;
BEGIN
FOR v_email_ad, v_email_perso, v_annee_academique, v_email_ordre, v_classe, v_matric_rs, v_numero, v_statut, v_qualite, v_groupe, v_orientation, v_resultat_final, v_id_people, v_numero_localisa,v_date_debut,v_date_fin
IN SELECT email_ad, email_perso, annee_academique, email_ordre, classe, matric_rs, numero, statut, qualite, groupe, orientation, resultat_final, id_people, numero_localisa,date_debut,date_fin
FROM brain.etudiants_update
LOOP
INSERT INTO brain.etudiants (email_ad, email_perso, annee_academique, email_ordre, classe, matric_rs, numero, statut, qualite, groupe, orientation, resultat_final,id_people,numero_localisa,date_debut,date_fin)
VALUES(v_email_ad, v_email_perso, v_annee_academique, v_email_ordre, v_classe, v_matric_rs, v_numero, v_statut, v_qualite, v_groupe, v_orientation, v_resultat_final, v_id_people,v_numero_localisa,v_date_debut,v_date_fin)
ON CONFLICT ON CONSTRAINT update_id_student DO UPDATE SET
email_ad = excluded.email_ad,
email_perso = excluded.email_perso,
classe = excluded.classe,
statut = excluded.statut,
qualite = excluded.qualite,
groupe = excluded.groupe,
orientation = excluded.orientation,
resultat_final = excluded.resultat_final,
id_people = excluded.id_people,
numero_localisa = excluded.numero_localisa,
date_debut = excluded.date_debut,
date_fin = excluded.date_fin;
END LOOP;
truncate table only brain.etudiants_update restart identity cascade;
return true;
END
Ce que je ne comprend pas c'est que cette fonction à une influence sur mon id serial et que celui-ci atteint des nombres grandiose.
Auriez-vous une piste pour arrêter ce phénomène ?
D'avance merci/
Bonjour,
J'ai créé le type suivant :
CREATE TYPE proeco AS (
nom text,
prenom text,
matricule int4,
hash text);
Ensuite je crée la fonction suivante :
DROP FUNCTION test();
CREATE FUNCTION test() RETURNS SETOF proeco AS $$
rv = plpy.execute("SELECT nom,prenom,matricule,hash FROM users")
d = rv.nrows();
if d > 1:
return rv[0:5]
nom = "toto";
prenom = "toto";
matricule = 123;
hash = "hash";
return (nom,prenom,matricule,hash)
$$ LANGUAGE plpythonu;
Cela fonctionne dans souci, mais lorsque c'est vide, j'ai l"erreur suivante, pourtant il me semble être cohérent par rapport à la doc https://docs.postgresql.fr/10/plpython-data.html
voici le message d'erreur :
Query execution failed
Motif:
SQL Error [22P02]: ERROR: malformed record literal: "toto"
Détail : Missing left parenthesis.
Où : while creating return value
PL/Python function "test"
Merci de votre aide.
Pages : 1