PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 Re : Général » Information connexion utilisateur » 20/06/2018 16:40:21

Merci beaucoup, je vais aller regarder ça de plus près.

#2 Général » Information connexion utilisateur » 20/06/2018 16:13:45

Mael
Réponses : 2

Bonjour,

J'aimerais savoir s'il existe une moyen de détecter une connexion lorsqu'un utilisateur se connecte sur une base de données (un fichier dans lequel lire, une fonctionnalité Postgresql ...).

Merci d'avance.

#3 Re : Migration » Migration Oracle => PostgreSQL (savepoint) » 25/05/2018 14:17:26

Merci pour ta réponse.

Je comprends que ce n’est pas possible de migrer ce code tel quel sous PostgreSQL, mais je cherche à me rapprocher au plus du fonctionnement d’oracle.
J’ai fini par abandonner l’idée de faire un COMMIT dans une procédure (vivement la version 11 de PostgreSQL), en revanche j’arrive à reproduire le système de savepoint d’oracle grâce à plusieurs bloc BEGIN imbriqués et grâce aux exceptions. Cependant mon approche à des limites, comme le fait de dupliquer le code de certaines procédures mais aussi le fait que je suis restreint pour annuler une partie de la procédure (je suis obligé de tester mes conditions dans le bloc BEGIN concerné).


Je voulais donc savoir si quelqu’un avait déjà eu ce problème et s’il a pu le résoudre.

#4 Migration » Migration Oracle => PostgreSQL (savepoint) » 24/05/2018 08:19:36

Mael
Réponses : 2

Bonjour,
Je cherche à migrer du code pl/sql vers du pl/pgsql et je rencontre quelques problèmes notamment pour ce qui est de migrer des procédures qui comportent des savepoints.
Voici un exemple simple sous oracle illustrant mon problème :


CREATE TABLE exemple ( id INTEGER, string VARCHAR2(50), date_creation TIMESTAMP);

CREATE OR REPLACE PROCEDURE p1 AS
BEGIN
    p4();
    INSERT INTO exemple VALUES (1, 'Procédure 1', current_timestamp);
    SAVEPOINT sp1_1;
    INSERT INTO exemple VALUES (2, 'Procédure 1', current_timestamp);
    ROLLBACK TO SAVEPOINT sp1_1;
    p3();
END;
/


CREATE OR REPLACE PROCEDURE p2 AS
BEGIN
    INSERT INTO exemple VALUES (1, 'Procédure 2', current_timestamp);
    COMMIT;
    INSERT INTO exemple VALUES (2, 'Procédure 2', current_timestamp);
    SAVEPOINT sp1_1;
    p3();
END;
/


CREATE OR REPLACE PROCEDURE p3 AS
BEGIN
    INSERT INTO exemple VALUES (1, 'Procédure 3', current_timestamp);
    ROLLBACK TO sp1_1;
    COMMIT;
END;
/

CREATE OR REPLACE PROCEDURE p4 AS
BEGIN
    INSERT INTO exemple VALUES (1, 'Procédure 4', current_timestamp);
    SAVEPOINT sp4_1;
    INSERT INTO exemple VALUES (2, 'Procédure 4', current_timestamp);
END;
/


Bien sûr, les rollback to de cet exemple ne sont pas arbitraire, il y a des tests de conditions qui déterminent s’il y a un rollback, un rollback to ou rien du tout.
J’ai commencé à élaborer une solution grâce à la gestion d’exceptions mais je me retrouve bloqué lorsque je suis dans la configuration ci-dessus  avec le dernier rollback to sp1_1 dans P3.
De plus lorsque j’utilise les exceptions pour me permettre d’annuler certaines modifications, je suis obligé de regrouper les procédures P4, P1, P3 et les procédures P2 et P3 (ce qui me fait dupliquer le code de P3).


Mes questions sont donc :
- Est-ce qu’il y a un moyen de migrer ce code sous PostgreSQL 10  pour qu’il corresponde au code Oracle (savepoint) ?
- Si oui, comment le migrer et est-il possible de le faire sans dupliquer le code de P3 ?

Merci d’avance de votre aide.

Pied de page des forums

Propulsé par FluxBB